diff --git a/cron/cron.php b/cron/cron.php index e1942c5c..604d4dba 100644 --- a/cron/cron.php +++ b/cron/cron.php @@ -9,10 +9,15 @@ if (php_sapi_name() !== 'cli') { } // Only one run at a time. Autopay charges cards, so an overlapping run (the previous -// run still going when the next one fires) could bill the same invoice twice. The -// handle is held for the life of the process and released when it exits. -$cron_lock_handle = fopen(sys_get_temp_dir() . '/itflow_cron.lock', 'c'); -if ($cron_lock_handle === false || !flock($cron_lock_handle, LOCK_EX | LOCK_NB)) { +// run still going when the next one fires) could bill the same invoice twice. The lock +// file is named per install so separate ITFlow instances on one host don't block each +// other, and the handle is held for the life of the process, released when it exits. +$cron_lock_file = sys_get_temp_dir() . '/itflow_cron_' . md5(__DIR__) . '.lock'; +$cron_lock_handle = fopen($cron_lock_file, 'c'); +if ($cron_lock_handle === false) { + die("Cannot open the cron lock file at $cron_lock_file - check permissions and open_basedir.\n"); +} +if (!flock($cron_lock_handle, LOCK_EX | LOCK_NB)) { die("Cron is already running - exiting.\n"); }