Есть ситуация, когда вы запускаете какой либо скрипт по cron в фоне, например, раз в час, но он может не успеть выполнится, а запуск 2й копии может натворить много бед.
Есть такое решение, получаем pid запущенного уже процесса с таким же именем и убиваем его при запуске этого же скрипта повторно.
[php title=»php код»]
$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]");
}
}
[/php]
Если вы будете использовать подобную конструкцию в нескольких файлах cron одновременно, нужно чтобы файлы php были с разными названиями.