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

82

Я хочу проверить, работает ли определенный 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
croppio.com
источник
к сожалению все вышеперечисленное пробовал но у меня не работает. как вы говорите, пробная версия / bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)" показывает сообщение ниже, не уверен, что это / bin / sh: PATH = / bin : не является идентификатором

Ответы:

73

Синтаксис для записи в 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".

jamesodhunt
источник
2
Я получил разрешение на 2-й шаг. Что я должен делать?
Акикара
@akikara chmod + x ./cron.sh - очевидно, замените ./cron.sh тем, где находится ваш файл, который вы пытаетесь запустить
Tisch
46

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

В Linux:

service crond status
service crond stop
service crond start

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

service cron status
service cron stop
service cron start
user53817
источник
13
Только примечание ... для Ubuntu это cronнеcrond
Amit Коли
32

Не перенаправляйте вывод ошибок в / 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 
rubiojr
источник
19

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

crontab -l

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

  1. мин (0 - 59)

  2. час (0 - 23)

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

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

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

  6. команда

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

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

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

bioShark
источник
* / 2 * * * * Я перешел на каждые две минуты
croppio.com
11

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

Ашиш Карпе
источник
Это хорошее предложение.
Рахиль Вазир
2
также полезно: crontab-generator.org
rubo77
2

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

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

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

dragon788
источник
1

ах !!

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

сейчас попробую ответить.

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

luckbychance
источник