Я знаю, что этот вопрос уже задавался, но я либо не понял ответа, либо он не относился ко мне.
У меня есть 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}'
быть достаточным? Он определенно скажет вам, запущен ли скрипт, не нужно заранее проверять, не убил ли его кто-то. Как создание, а затем удаление файла блокировки лучше / быстрее, чем это?
Я не уверен, просто хочу знать плюсы и минусы. Спасибо