Я хочу проверить, работает ли определенный crontab должным образом. Я добавил такую работу:
*/2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Я знаю, что я перенаправляю на нулевое устройство, но я не уверен, что приведенная выше команда хороша.
(CRON) error (grandchild #2788 failed with exit status 2)
*/2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Синтаксис записи crontab выглядит правильно. Действительно, если вы редактируете свой crontab, используя «crontab -e
» (как вы должны), вы получите ошибку, если все равно укажете синтаксически недопустимую запись crontab.
Во-первых, правильно ли работает /path_to_my_php_script/info.php
из командной строки?
Если это так, то работает ли он правильно, как это?:
/ bin / sh -c "(экспорт PATH = / usr / bin: / bin; /path_to_my_php_script / info.php < / dev / null)"
Если это работает, работает ли это так?
/ 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`».
Хотя это очень редко, иногда Крон перестает работать должным образом, даже если служба работает. Вот как проверить, работает ли crond, и остановить / запустить сервис.
На Linux:
service crond status
service crond stop
service crond start
На Ubuntu и других системах на основе Debian:
service cron status
service cron stop
service cron start
Не перенаправляйте выходные данные ошибки в / 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
Вы можете увидеть свой активный cron с помощью команды терминала:
crontab -l
Вот параметры по порядку:
мин (0 - 59)
час (0 - 23)
день месяца (1 - 31)
месяц (1 - 12)
день недели (0 - 6) (воскресенье = 0)
команда
Итак, вы звоните своему сценарию каждую первую минуту каждого часа. Вы должны проверять свои результаты с более частым интервалом для целей тестирования:
* * * * * <command> #Runs every minute
Это будет звонить каждую минуту!
Для временной части в каждой строке вы можете использовать этот тестер кронов для проверки / проверки определения времени вашего крона.
Я полагаю, что вы также можете использовать «run-parts», чтобы запускать работу cron из группы. Это на самом деле то, что cron использует для запуска периодических заданий cron, поэтому, предоставляя соответствующие аргументы, вы можете запустить их в любое время.
Если вы просто хотите запустить один файл вместо всех заданий cron, определенных, например, в /etc/cron.daily
, вам нужно будет предоставить аргумент ergex вместе с допустимым ergex. run-parts --list --regex '^ p.* d $ '/ etc
Имейте в виду, что задания cron обычно называются без расширения и помечаются как исполняемые, поэтому убедитесь, что ваши сценарии похожи, хотя использование regex может позволить вам запустить скрипт с расширением.
ах !!
получил ответ сам, я проверил и не нашел crond
в каталоге установки по умолчанию, т.е. /etc/init.d/
теперь попробуй и ответь.
примечание - я тоже проверил cron.allow
, cron.deny
. Пока все хорошо.