Cron (Command Run ON) — утилита для автоматического запуска программ и скриптов на сервере в определённое время. Cron очень полезен для рутинных задач, таких как сканирование системы, ежедневное резервное копирование и т.д. Cron автоматически выполняет задания в бэкенде в указанное время. Управлять cron нужно с помощью crontab. В этой статье вы увидите 18 полезных примеров команды crontab.
Синтаксис Crontab
Crontab имеет шесть полей. 1-5 поля определяют дату и время исполнения. 6 поле используется для команды/скрипта. Синтаксис выглядит следующим образом:
- * — соответствует чему угодно
- День недели в другом формате: mon, tue, wed
- Месяц в другом формате: jan, feb, mar
- Несколько значений в поле: 1,5,7 или mon,fri
- Диапазон: 1-10 или 20-30 или sun-fri или feb-apr
- Несколько диапазонов: jan-mar,jul-sep
Как изменить расписание
Чтобы добавить или обновить задания в crontab, используйте команду ниже. Откроется текстовый файл с заданиями crontab, где их можно будет редактировать.
crontab -e
По умолчанию откроются задачи текущего пользователя. Для редактирования задач другого пользователя используйте команду:
crontab -u username -e
Как узнать список заданий Crontab
Для просмотра записей crontab текущего пользователя используйте команду:
crontab -l
Чтобы посмотреть список заданий другого пользователя, используйте -u:
crontab -u username -l
1. Ежедневно в 2 часа ночи.
Это будет полезно для ежедневного резервного копирования.
0 2 * * * /bin/sh backup.sh
2. Дважды в день
Команда ниже будет выполняться в 5 утра и 5 вечера ежедневно.
0 5,17 * * * /scripts/script.sh
3. Каждую минуту
* * * * * /scripts/script.sh
4. Каждое воскресенье в 17:00
Пригодится для планирования еженедельных задач.
0 17 * * sun /scripts/script.sh
5. Каждые 10 минут
Если вы хотите запустить скрипт с интервалом в 10 минут, вы можете настроить его, как показано ниже. Может быть полезно для мониторинга.
*/10 * * * * /scripts/monitor.sh
6. Определенные месяцы
Иногда может понадобиться запланировать задачи только на некоторые месяцы. Ниже приведен пример скрипта, который будет запущен в январе, мае и августе.
* * * jan,may,aug * /script/script.sh
7. Определенные дни
Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.
0 17 * * sun,fri /script/script.sh
8. Первое воскресенье каждого месяца.
Запланировать выполнение сценария только в первое воскресенье невозможно по параметру времени, но мы можем использовать условие в полях команд, чтобы сделать это.
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh
9. Каждые четыре часа.
Если вы хотите запустить скрипт с интервалом в 4 часа:
0 */4 * * * /scripts/script.sh
10. Дважды в каждое воскресенье и понедельник.
Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:
0 4,17 * * sun,mon /scripts/script.sh
11. Несколько задач
Можно запланировать несколько задач в одной записи с помощью точки с запятой:
* * * * * /scripts/script.sh; /scripts/scrit2.sh
12. Ежегодно (@yearly)
@yearly равно «0 0 1 1 *». Задание будет выполняться в первую минуту каждого года. Можно отправить новогодние поздравления 🙂
@yearly /scripts/script.sh
13. Ежемесячно (@monthly)
@monthly равно «0 0 1 * *». Задание будет выполняться в первую минуту месяца.
@monthly /scripts/script.sh
14. Еженедельно (@weekly)
@weekly равно «0 0 1 * mon». Задание будет выполняться в первую минуту недели.
@weekly /bin/script.sh
15. Ежедневно (@daily)
@daily равно «0 0 * * *». Задание будет выполняться в первую минуту каждого дня.
@daily /scripts/script.sh
16. Ежечасно (@hourly).
@hourly равно «0 * * * *». Задание будет выполняться в первую минуту каждого часа.
@hourly /scripts/script.sh
17. Выполнение задач при перезагрузке системы (@reboot).
@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.
@reboot /scripts/script.sh
18. Отправка результатов заданий на электронную почту
Если вы хотите отправить вывод на почту, то это можно сделать, установив переменную MAIL, как показано ниже.
# crontab -l
MAIL=bob
0 2 * * * /script/backup.sh