====== Трюки в консоли: Cron ======
{{mdi>console?48&align=right}}
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 с помощью скрипта [[https://pypi.org/project/chkcrontab/|chkcrontab]]
Скрипт verifycron из книги [[https://nostarch.com/wcss2/|Wicked cool shell scripts]] - [[https://www.nostarch.com/download/WickedCoolShellScripts2e_resources_updated.zip|полный сборник]], [[https://github.com/epety/100-shell-script-examples/blob/master/053-verifycron.sh|053-verifycron.sh]]
FIXME
==== Запускать cron каждый 10 секунд ====
Cron в Linux минимально принимает 1 минуту. Для запуска каждые n-секунд можно использовать [[https://ru.wikipedia.org/wiki/Sleep|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**.
* Для поиска ошибок можно использовать утилиту [[https://pypi.org/project/chkcrontab/|chkcrontab]].
* В конце файла должна быть пустая строка.
* Скрипт может не работать если не настроен PATH=
* Права должны быть -rw-r--r--, owner root:root
* [[https://stackoverflow.com/a/22744360|Советы на stackoverflow]]
==== 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).
{{tag>bash tnt}}