Задание крона, чтобы проверить, работает ли Сценарий PHP, если не затем работает

Попробуйте следование Вашей системы MAC OSX:

Включите Передачу X11 с опцией “X11Forwarding yes”, начинаются /private/etc/sshd_config для собственного локального хоста X11 Вашего демона SSH. Это позволит хосту MAC OSX получать клиентские запросы X11 назад от удаленных машин (Linux) через ‘ssh‘ с -X опция установлена.

Затем перезапустите sshd на хосте MAC OSX:

Под областью System Preference / Sharing на Mac OS X. Демон SSH должен работать на удаленной машине также!

4
01.10.2014, 00:40
3 ответа

Я хотел бы расширить ответ Давидана, так как вы новичок в концепции работы с Кроном. В каждой UNIX или Linux системе где-то хранится кронтаб. Кронтаб - это простой текстовый файл. Рассмотрим следующее: (Из Gentoo Wiki на Cron)

#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

Этот кронтаб должен повторять "Мне очень нравится крон" каждую минуту каждого час каждого дня каждый второй месяц. Очевидно, что вы бы делали это только если тебе действительно нравился Крон. Кронтаб также повторит: "Мне нравится Крон a маленький" в 16:30 каждый день в январе и феврале. Это также будет эхо "Мне не очень нравится Крон" в 3:10 1 января.

Будучи новичком в cron, вы, вероятно, захотите прокомментировать звёздные столбцы, чтобы знать, для чего используется каждый столбец. Каждая реализация Cron, о которой я знаю, всегда была в таком порядке. Теперь объединение ответа Давидана с моим комментируемым файлом:

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock

* * * * lockfile -r 0 /tmp/the.lock && php get_tweets.php; rm -f /tmp/the.lock

Установка значения по умолчанию для каждого столбца:
. Каждую минуту каждого часа каждого дня каждого месяца всю неделю... Каждую минуту всего года...

Как утверждает Давиданн, использование lock file гарантирует, что запущена только одна копия интерпретатора php, php parse_tweets.php - это команда "запустить" файл, и последний бит строки удалит lock file, чтобы подготовиться к следующему запуску. Мне не нравится удалять файл каждую минуту, но если это то поведение, которое вам нужно, то это очень приемлемо. Запись и перезапись на диск - это просто личное предпочтение

.
7
27.01.2020, 20:47

Вместо того, чтобы иметь отдельный cron, который просто запускал бы его, если он не запущен, почему бы просто не использовать его исключительно?

Например:

* * * * * 'lockfile -r 0 /tmp/the.lock && (php parse_tweets.php; rm -f /tmp/the.lock)'

Это запустит задание cron который будет выполнять parse_tweets.php один раз в минуту с использованием файла блокировки, так что у вас будет только одна копия, запускаемая cron за раз. (Это не помешает вам запустить php parse_tweets.php вне cron)

4
27.01.2020, 20:47

Регулярная проверка не удобна и не надежна. Если ваши скрипты остановятся, они не будут перезапущены, пока задание cron не запустится снова.

Существуют инструменты для обеспечения постоянного выполнения процесса , например supervise из daemontools , monit , god , supervisord и т. д. Запустите инструмент мониторинга во время загрузки и оставьте его в покое.

пока верно; do… done - грубый, но эффективный инструмент мониторинга, но вам нужно принять некоторые меры предосторожности. nohup - это начало. Убедитесь, что стандартный ввод перенаправлен так, чтобы это не терминал (некоторые реализации nohup делают это за вас). Вы должны записать вывод в файл и проверить этот файл в случае ошибок.

nohup sh -c 'while true; do …; done' </dev/null >myscript.log 2>&1 &

Также убедитесь, что ваша оболочка не посылает сигнал этому заданию при завершении работы. Если ваша оболочка имеет встроенную команду disown , запустите ее.

Во многих системах вы можете настроить запуск супервизора во время загрузки, зарегистрировав запись @reboot . Проверьте справочную страницу crontab (5) в вашей системе, чтобы узнать, поддерживается ли @reboot .

@reboot while true; do …; done </dev/null >myscript.log 2>&1
0
27.01.2020, 20:47

Теги

Похожие вопросы