Постоянное выполнение задания Cron

извините, если этот вопрос был задан раньше, однако я не мог найти ничего подходящего при поиске.

В настоящее время у меня есть PHP-скрипт, который проверяет базу данных для следующей записи, которая не была обновлена. Мой вопрос заключается в следующем: если я затем обновляю базу данных, чтобы показать, что запись обрабатывается во время выполнения задания cron (что занимает около 30 секунд), а задание cron запускается каждую секунду, а во втором 1 выполняется задание cron , но будет ли это задание ждать завершения до того, как задание cron будет работать во второй раз или оно будет работать во втором 2?

благодаря

Solutions Collecting From Web of "Постоянное выполнение задания Cron"

Если вы используете cronjob и не используете какой-либо блокировки в вашем php-скрипте, cron будет запускать более одной копии скрипта, если событие времени происходит до завершения последнего скрипта.

Чтобы избежать такой проблемы, вы можете сделать что-то вроде этого:

 $LOCK_FN = "/tmp/my-script.lock" if(file_exists ($LOCK_FN)){ //previous script is not finish exit. die("Previous script is not finished yet."); } //Create lock $fp = fopen($LOCK_FN,"w"); fclose($fp); /* Put your script logic here */ //Open the lock work is done. unlink($LOCK_FN) 

Используйте сокеты, чтобы что-то заблокировать. Поскольку, если сценарий заканчивается, порт сокета автоматически открывается снова.

 <?php $port = 1080; // choose unused port $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$sock) { exit; } socket_set_nonblock($sock); if (!socket_bind($sock, "127.0.0.1", $port)) { exit; } while(1) { ... } ?> 

Используйте другой порт для каждого скрипта.

Добавьте этот скрипт в Crontab с помощью * * * * *

Cronjob не будет ждать завершения предыдущего, прежде чем запускать новый экземпляр. Что вы хотите, это демон, см. « Запуск php-скрипта в качестве процесса демон»