Перевірте, чи працює 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

на жаль, все вище спробувало, але не працює для мене. як ти кажеш, проба / bin / sh -c "(експорт 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").

Найбільш вірогідною проблемою є те, що CAT Pron використовує для запуску вашої програми надто обмежувальний характер. Таким чином, ви можете додати щось подібне до верхньої частини запису про свій 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 / тощо]), весь вихід із програм crontab надсилається вам електронною поштою автоматично. У настільній системі Ubuntu за замовчуванням не буде налаштована локальна пошта, але якщо ви працюєте на сервері, ви можете просто набрати "пошту" в терміналі, щоб побачити всі ці повідомлення електронної пошти. Це також стосується команди " at".


2
Мені дозволено відмовити у 2-му кроці. Що я повинен зробити?
akikara

@akikara CHMOD + х ./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

13
Лише зауваження ... для Ubuntu це cronне такcrond
Аміт Колі

32

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

18

Ви можете бачити свій активний cron за допомогою команди терміналу:

crontab -l

Ось параметри в порядку:

  1. хв (0 - 59)

  2. година (0 - 23)

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

  4. місяць (1 - 12)

  5. день тижня (0 - 6) (неділя = 0)

  6. командування

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

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

Це буде дзвонити щохвилини!


* / 2 * * * * Я змінився кожні дві хвилини зараз
croppio.com


2

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

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

Майте на увазі, що завдання cron зазвичай називаються без розширення та позначаються як виконувані файли, тому переконайтеся, що ваші сценарії схожі, хоча використання регулярного виразу може дозволити запускати сценарій із розширенням.


1

ах !!

я отримав відповідь сам, я перевірив і не знайшов crondвсередині каталогу установки за замовчуванням, тобто/etc/init.d/

тепер спробуємо відповісти.

примітка - я перевірити cron.allow, cron.denyтеж. На сьогодні все добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.