20
Ноя

Выполнение только одной копии скрипта php, убиваем при запуске старый

Есть ситуация, когда вы запускаете какой либо скрипт по 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 были с разными названиями.

Комментариев нет

Leave a Comment