====== Трюки в консоли: 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}}