Проверьте, работает ли 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: Нет ошибок в журналах с этой новой работой:
 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Комментарии к вопросу (1)
Решение

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

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

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

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

     / bin / sh -c "(экспорт PATH = / usr / bin: / bin; /path_to_my_php_script / info.php < / dev / null > / dev / null 2 > & 1)"

Шаг (3) аналогичен тому, как cron будет запускать вашу программу (как описано в «man 5 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 по умолчанию не настроена локальная почта, но если вы работаете на сервере, вы можете просто ввести «почту» в терминале, чтобы увидеть все эти письма cron. Это также относится к команде «at`».

Комментарии (2)

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

На Linux:

service crond status
service crond stop
service crond start

На Ubuntu и других системах на основе Debian:

service cron status
service cron stop
service cron start
Комментарии (0)

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

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 
Комментарии (0)

Вы можете увидеть свой активный cron с помощью команды терминала:

crontab -l

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

  1. мин (0 - 59)

  2. час (0 - 23)

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

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

  5. день недели (0 - 6) (воскресенье = 0)

  6. команда

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

* * * * *  #Runs every minute

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

Комментарии (1)

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

Комментарии (2)

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

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

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

Комментарии (0)

ах !!

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

теперь попробуй и ответь.

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

Комментарии (0)