Автоматическое выполнение задач с помощью cron.
Cron — широко используемый инструмент в операционных системах Unix для планирования выполнения различных задач. Он способен в обозначенное время с определенной периодичностью выполнять скрипты на сервере. Этот инструмент полезен для выполнения различных задач, таких как мониторинг свободного места на диске, выполнения регулярного резервного копирования, удаления ненужных файлов (логов) и прочего.
Коротко cron можно описать как планировщик задач. Например, разработчику нужно собирать статистику каждые 4 дня в 16:00. Для этого он создает «задание», логику которого описывает в файле crontab. Cron является встроенной утилитой и доступен в каждом дистрибутиве Linux.
Следующие файлы ограничивают доступ к планировщику (по умолчанию они не существуют):
- /etc/cron.allow - если существует, пользователи указанные в этом файле имеют возможность запуска заданий планировщика;
- /etc/cron.deny - если существует, пользователи указанные в этом файле не имеют возможность запуска заданий планировщика.
Если cron.allow существует, только юзерам, перечисленным в нем, разрешено использовать cron, при этом файл cron.deny игнорируется. Если cron.allow не существует, юзерам, указанным в cron.deny, не разрешается использовать планировщик cron.
Формат записей в обоих файлах - одно имя пользователя в каждой строке. Пробелы не разрешены. Файлы контроля доступа считываются каждый раз, когда пользователь пытается добавить или удалить задачу cron.
Каждая запись в crontab состоит из шести полей, указываемых в следующем порядке:
minute(s) hour(s) day(s) month(s) weekday(s) command(s)
Поля разделяются пробелами или знаками табуляции. Первые пять представляют собой числовые значения, а шестое - это команда, которая будет выполняться. В следующей таблице кратко описывается каждое из полей:
Стандартная запись будет выглядеть так:
20 07 * * * /home/admin/backup
Запуск скрипта каждый понедельник в 9:00 и 18:00 часов:
0 9,18 * * 1 /home/ivan/script.sh
Запуск команды каждый месяц 1 числа в 12:00:
0 12 1 * * command
Запуск скрипта в полночь с понедельника по пятницу:
0 0 * * 1-5 /home/ivan/script.sh
Запуск скрипта каждый день в 0:30 и 12:30:
30 */12 * * * script.sh
Существуют уже готовые команды, которые позволяют задать параметры выполнения скрипта. Они выглядят так:
- @reboot — команда выполнится один раз при перезагрузке системы;
- @yearly — задание будет выполняться один раз в год;
- @annually — вариация команды @yearly, делает то же самое, но в Новый год;
- @monthly — ежемесячное выполнение задания;
- @weekly — скрипт будет срабатывать раз в неделю;
- @daily — ежедневное выполнение;
- @midnight — срабатывание раз в день в полночь;
- @hourly — скрипт выполняется ежечасно.
Записи с готовыми командами выглядят следующим образом:
@monthly <исполняемая-команда>
Обратите внимание, Cron считается устаревшим в операционных системах с поддержкой systemd. В таких дистрибутивах Linux его заменили на systemd.timer. Предназначение этой утилиты полностью совпадает с cron. При этом популярность «устаревшего» планировщика все еще выше благодаря простоте использования.