Проверьте, работает ли 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

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

В Linux:

service crond statusservice crond stopservice crond start

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

service cron statusservice cron stopservice cron start

Синтаксис для записи 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 для запуска вашей программы, слишком ограничен. Поэтому вы можете добавить что-то вроде следующего в начало вашей записи crontab (вам нужно будет добавить в любые каталоги, которые понадобятся вашему скрипту):

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

Также обратите внимание, что cron по умолчанию будет использовать /bin/sh, а не баш. Если вам нужен 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" командуй.

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

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

  1. мин (0 - 59)

  2. час (0 - 23)

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

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

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

  6. команда

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

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

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

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

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

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

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

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

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

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

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

ах!!

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

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

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

к сожалению, все вышеперечисленное попробовано, но у меня не работает. как вы говорите, пробный /bin/sh -c “(ПУТЬ экспорта=/bin; /tmp/trial.sh </dev/null)” показывает сообщение ниже, не уверен, что это такое /bin/sh: PATH=/bin: не является идентификатором