Есть ситуация, когда вы запускаете какой либо скрипт по cron в фоне, например, раз в час, но он может не успеть выполнится, а запуск 2й копии может натворить много бед.
Есть такое решение, получаем pid запущенного уже процесса с таким же именем и убиваем его при запуске этого же скрипта повторно.
$pid = getmypid(); $path = $_SERVER['PHP_SELF']; $file_ex = basename($path); exec("ps ax | grep $file_ex | grep -v grep | grep -v $pid | awk '{print $1}'", $output_pid); if(isset($output_pid[0])){ for($i = 0; $i < count($output_pid); ++$i) { exec("kill $output_pid[$i]"); } }
Если вы будете использовать подобную конструкцию в нескольких файлах cron одновременно, нужно чтобы файлы php были с разными названиями.