Назад | Перейти на главную страницу

Не запускайте задание cron, если оно уже запущено

Я знаю, что этот вопрос уже задавался, но я либо не понял ответа, либо он не относился ко мне.

У меня есть php-скрипт, который я вызываю каждую минуту с помощью CPanel для настройки Cron Job. Природа сценария означает, что он может выйти за пределы одной минуты, поэтому мне нужно знать, как остановить выполнение следующего, если первый не завершился.

У меня есть VPS с CENTOS 5.5 и доступ к WHM и CPanel. Я никогда раньше не использовал Linux (только вчера получил сервер), поэтому я понятия не имею, что делаю, и был бы признателен за помощь, если это возможно. Если мне нужно предоставить дополнительную информацию, дайте мне знать (я не знаю, какая информация вам понадобится в данный момент).

Спасибо.

Используйте сценарий bash в качестве задания cron

cron.sh

#!/bin/bash
$lockfile=/tmp/lock.file

if [ ! -e $lockfile ]; then
   touch $lockfile
   php /path/to/php/script.php
   rm $lockfile
else
   echo "script already running"
fi

Посмотри пожалуйста Управление процессом. Вероятно, вы захотите использовать файл блокировки. Ты можешь использовать flock например.

Почему вы не можете позволить своей работе завершиться?

В вашем вопросе говорится: «Я либо не понял ответа, либо он не относится ко мне», но вы не говорите, каким образом. Пожалуйста, будьте более конкретными.

Документы: https://www.timkay.com/solo/

solo - это очень простой сценарий (10 строк), который не позволяет программе запускать более одной копии за раз. С cron полезно убедиться, что задание не запускается до завершения предыдущего.

пример

* * * * * solo -port=3801 ./job.pl blah blah

Мне любопытно, решит ли проблему реализация чего-либо с помощью ps. Было бы просто ps -e | grep script_name.php | awk '{print $4}' быть достаточным? Он определенно скажет вам, запущен ли скрипт, не нужно заранее проверять, не убил ли его кто-то. Как создание, а затем удаление файла блокировки лучше / быстрее, чем это?

Я не уверен, просто хочу знать плюсы и минусы. Спасибо