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

56

Я хочу проверить, работает ли определенный 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
    
задан resizemyimg.com 06.12.2011 в 10:58
источник

7 ответов

53

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

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

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

grep cron /var/log/syslog

Вы можете сразу показать ошибки при сохранении файла после редактирования /etc/crontab или файлов внутри /etc/cron.d/ с помощью:

tail -f /var/log/syslog | grep cron &

Если редактирование в порядке, вы увидите только уведомление RELOAD , будут возникать ошибки, например

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
    
ответ дан rubiojr 06.12.2011 в 11:20
20

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

В Linux:

service crond status
service crond stop
service crond start

В Ubuntu:

service cron status
service cron stop
service cron start
    
ответ дан user53817 27.06.2016 в 22:21
15

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

crontab -l

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

  1. min (0 - 59)

  2. час (0 - 23)

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

  4. month (1 - 12)

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

  6. Команда

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

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

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

    
ответ дан bioShark 06.12.2011 в 11:11
7

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

    
ответ дан Ashish Karpe 20.08.2016 в 18:21
1

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

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

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

    
ответ дан dragon788 17.10.2017 в 20:29
0

ah !!

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

теперь попытается ответить.

note - Я также проверял cron.allow , cron.deny . Пока все хорошо.

    
ответ дан luckbychance 23.05.2014 в 15:25
0

Я создал test.sh внутри каталога /root/ . найдите синтаксис:

#!/bin/bash
cd /root
COUNTER_FILE="counter.tmp"
if [ "$#" -eq 1 ];
then
    echo "" > $COUNTER_FILE
else
 declare -i count=0
 count='cat $COUNTER_FILE'
 ((count++))
 echo $count > $COUNTER_FILE    
fi

и добавьте следующую строку в crontab coomand crontab -e .

SHELL=/bin/bash
* * * * *  bash /root/test.sh >> error.log 2>&1

теперь запустите . /root/test.sh 0 в файл creat.tmp creat.

команда cat counter.tmp показывает, что внутри нее будет увеличиваться значение в каждую минуту.

    
ответ дан hardik sharma 06.02.2017 в 13:16