Проверьте, работает ли crontab

Я хочу проверить, работает ли определенный crontab правильно. Я добавил работу, подобную этой:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Я знаю, что перенаправляю на нулевое устройство, но я не уверен, что приведенная выше команда хороша.

* Редактировать 1: В моем / var / log / syslog каждые две минуты появляется следующая ошибка:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Редактировать 2: Нет ошибок в журналах с новым заданием:

[ 112]
82
задан 23 May 2014 в 18:02

8 ответов

Для временной части в каждой строке вы можете использовать этот cron tester , чтобы проверить / проверить ваше определение времени cron.

0
ответ дан 23 May 2014 в 18:02

Хотя очень редко, иногда Cron перестает работать должным образом, даже если служба работает. Вот как проверить, что crond работает и остановить / запустить службу.

В Linux:

service crond status
service crond stop
service crond start

В Ubuntu:

service cron status
service cron stop
service cron start
0
ответ дан 23 May 2014 в 18:02

Вы видите свой активный крон с терминальной командой:

crontab -l

Вот параметры в порядке:

  1. минута (0 - 59)

  2. час (0 - 23)

  3. день месяца (1 - 31)

  4. месяц (1 - 12)

  5. день недели (0 - 6) (Sunday=0)

  6. команда

Так, Вы называете свой сценарий каждой первой минутой каждого часа. Необходимо протестировать вывод в чаще интервал для тестирования цели:

* * * * * <command> #Runs every minute

Это будет называть его каждую минуту!

19
ответ дан 23 May 2014 в 18:02

Не перенаправляйте вывод ошибок к/dev/null, и grep/var/log/syslog для крона производят.

grep cron /var/log/syslog

Можно сразу показать ошибки, сохранив файл после редактирования /etc/crontab или файлы внутри /etc/cron.d/ с:

tail -f /var/log/syslog | grep --line-buffered cron

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

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
32
ответ дан 23 May 2014 в 18:02

Я считаю, что вы также можете использовать run-parts для запуска заданий cron вне группы. Это именно то, что cron использует для запуска периодических заданий cron, поэтому, предоставляя соответствующие аргументы, вы можете запускать их в любое время.

Если вы просто хотите запустить один файл вместо всех заданий cron, определенных, например, в /etc/cron.daily, вам нужно будет указать аргумент regex вместе с действительным регулярным выражением. run-parts --list --regex '^p.*d

Имейте в виду, что задания cron обычно именуются без расширения и помечаются как исполняемые, поэтому убедитесь, что ваши сценарии похожи, хотя использование регулярного выражения может позволить вам запустить сценарий с расширением. [ 115] /etc

Имейте в виду, что задания cron обычно именуются без расширения и помечаются как исполняемые, поэтому убедитесь, что ваши сценарии похожи, хотя использование регулярного выражения может позволить вам запустить сценарий с расширением. [ 115]

0
ответ дан 23 May 2014 в 18:02

Синтаксис для записи в crontab выглядит правильно. В самом деле, если вы отредактируете свой crontab, используя «crontab -e» (как следует), вы получите ошибку, если в любом случае укажете синтаксически неверную запись в crontab.

  1. Во-первых, правильно ли /path_to_my_php_script/info.php запускается из командной строки?

  2. Если да, то также правильно ли он работает?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Если это работает, работает ли так?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

Шаг (3) аналогичен тому, как cron будет запускать вашу программу (как описано в "man 5 cron".

Наиболее вероятная проблема, с которой вы сталкиваетесь, заключается в том, что cron PATH использует для запуска вашей программы слишком строгие ограничения. Поэтому вы можете добавить что-то вроде следующего в начало вашей записи в crontab (вам нужно добавить в любые каталоги, которые понадобятся вашему скрипту):

PATH=~/bin:/usr/bin/:/bin

Также обратите внимание, что по умолчанию cron будет использовать /bin/sh, а не bash. Если вам нужно bash, также добавьте это в начало вашего файла crontab:

SHELL=/bin/bash

Обратите внимание, что оба эти изменения затронут все записи в crontab. Если вы просто хотите изменить эти значения для вашего info.php Программа, вы можете сделать что-то вроде этого:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Также стоит упомянуть, что в системе, настроенной на «почту» (другими словами, в системе, в которой настроен MTA [sendmail / postfix / etc]), весь вывод из программ crontab отправляется вам по электронной почте автоматически. В стандартной настольной системе Ubuntu локальная почта не будет настроена, но если вы работаете на сервере, вы можете просто набрать «mail» в терминале, чтобы увидеть все эти cron-сообщения. Это также относится к команде «at».

0
ответ дан 23 May 2014 в 18:02

ах !!

получил ответ сам, я проверил и не нашел crond в каталоге установки по умолчанию, т.е. /etc/init.d/

теперь попытается ответить.

примечание - я тоже проверил cron.allow, cron.deny. Пока все хорошо.

0
ответ дан 23 May 2014 в 18:02

Старый вопрос и много сложных ответов. Проще всего добавить эту строку в ваш crontab

* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'

Он будет просто каждую минуту писать текущую дату в файл ~/cron-test.txt

Затем вы просто запускаете cat ~/cron -test.txt и проверьте, является ли отображаемая дата текущей датой. Если это crontab, то он работает правильно.

10
ответ дан 13 November 2020 в 11:46

Другие вопросы по тегам:

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