Я хочу проверить, работает ли определенный 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]Для временной части в каждой строке вы можете использовать этот cron tester , чтобы проверить / проверить ваше определение времени cron.
Хотя очень редко, иногда Cron перестает работать должным образом, даже если служба работает. Вот как проверить, что crond работает и остановить / запустить службу.
В Linux:
service crond status
service crond stop
service crond start
В Ubuntu:
service cron status
service cron stop
service cron start
Вы видите свой активный крон с терминальной командой:
crontab -l
Вот параметры в порядке:
минута (0 - 59)
час (0 - 23)
день месяца (1 - 31)
месяц (1 - 12)
день недели (0 - 6) (Sunday=0)
команда
Так, Вы называете свой сценарий каждой первой минутой каждого часа. Необходимо протестировать вывод в чаще интервал для тестирования цели:
* * * * * <command> #Runs every minute
Это будет называть его каждую минуту!
Не перенаправляйте вывод ошибок к/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
Я считаю, что вы также можете использовать run-parts
для запуска заданий cron вне группы. Это именно то, что cron использует для запуска периодических заданий cron, поэтому, предоставляя соответствующие аргументы, вы можете запускать их в любое время.
Если вы просто хотите запустить один файл вместо всех заданий cron, определенных, например, в /etc/cron.daily
, вам нужно будет указать аргумент regex вместе с действительным регулярным выражением. run-parts --list --regex '^p.*d
Имейте в виду, что задания cron обычно именуются без расширения и помечаются как исполняемые, поэтому убедитесь, что ваши сценарии похожи, хотя использование регулярного выражения может позволить вам запустить сценарий с расширением. [ 115] /etc
Имейте в виду, что задания cron обычно именуются без расширения и помечаются как исполняемые, поэтому убедитесь, что ваши сценарии похожи, хотя использование регулярного выражения может позволить вам запустить сценарий с расширением. [ 115]
Синтаксис для записи в crontab выглядит правильно. В самом деле, если вы отредактируете свой crontab, используя «crontab -e
» (как следует), вы получите ошибку, если в любом случае укажете синтаксически неверную запись в crontab.
Во-первых, правильно ли /path_to_my_php_script/info.php
запускается из командной строки?
Если да, то также правильно ли он работает?:
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
Если это работает, работает ли так?
/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
».
ах !!
получил ответ сам, я проверил и не нашел crond
в каталоге установки по умолчанию, т.е. /etc/init.d/
теперь попытается ответить.
примечание - я тоже проверил cron.allow
, cron.deny
. Пока все хорошо.
Старый вопрос и много сложных ответов. Проще всего добавить эту строку в ваш crontab
* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'
Он будет просто каждую минуту писать текущую дату в файл ~/cron-test.txt
Затем вы просто запускаете cat ~/cron -test.txt
и проверьте, является ли отображаемая дата текущей датой. Если это crontab, то он работает правильно.