Содержание
Трюки в консоли: Cron
console
CRON (Command Run ON) - демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в заданное время.
Памятка для себя.
# minute (0-59), # | hour (0-23), # | | day of the month (1-31), # | | | month of the year (1-12), # | | | | day of the week (0-6 with 0=Sunday). # | | | | | commands 0 2 * * 0,4 /root/bin/logchecker string meaning ------ ------- @reboot Run once, at startup. @yearly Run once a year, "0 0 1 1 *". @annually (same as @yearly) @monthly Run once a month, "0 0 1 * *". @weekly Run once a week, "0 0 * * 0". @daily Run once a day, "0 0 * * *". @midnight (same as @daily) @hourly Run once an hour, "0 * * * *".
HowTo
Валидация crontab
Проверка crontab/cron.d с помощью скрипта chkcrontab
Скрипт verifycron из книги Wicked cool shell scripts - полный сборник, 053-verifycron.sh
Запускать cron каждый 10 секунд
Cron в Linux минимально принимает 1 минуту. Для запуска каждые n-секунд можно использовать sleep.
* * * * * php -q /var/www/cron_worker.php * * * * * sleep 10; php -q /var/www/cron_worker.php * * * * * sleep 20; php -q /var/www/cron_worker.php * * * * * sleep 30; php -q /var/www/cron_worker.php * * * * * sleep 40; php -q /var/www/cron_worker.php * * * * * sleep 50; php -q /var/www/cron_worker.php
Предотвратить повторный запуск задачи из cron
/usr/bin/flock -xn /tmp/my_long_task.lock -c 'sh /path/backup.sh
- -x –exclusive - get an exclusive lock (default)
- -n –nonblock - fail rather than wait
Ошибки
Мой список траблшутинга
- Первая строка не должна начинаться с * * * * *, может быть переменная или #закоментированная строка
- Редактировать всё желательно через crontab -e.
- Для поиска ошибок можно использовать утилиту chkcrontab.
- В конце файла должна быть пустая строка.
- Скрипт может не работать если не настроен PATH=
- Права должны быть -rw-r–r–, owner root:root
Error: bad username; while reading /etc/cron.d/script
А также ERROR (Syntax error, this crontab file will be ignored)
Нужно указать пользователя.
Например Minute-Hour-Day_of_Month-Month-Day_of_week
0 3 * * * root php /var/www/perl.php
Error: bad minute; while reading crontab
Вероятнее всего используется перенос строк чего не должно быть.
No MTA installed, discarding output
Это скорее warning, нежели error. Нужно установить MTA (postfix или exim).
Обсуждение