Системным администраторам и разработчикам часто приходится сталкиваться с периодическим выполнением скриптов и заданий. В Linux автоматическим выполнением задач по расписанию занимается cron.
Cron — это планировщик, который позволяет автоматически выполнять задачи по заданному расписанию от имени разных пользователей. Такие задачи называются Cron Jobs.
Каждая задача (скрипт) описывается одной строкой в файле crontab. Сначала указывается расписание, потом ссылка на скрипт. Шаблон задания выглядит так:
* * * * * /path/to/job.sh
Что можно понимать как:
[минуты] [часы] [день месяца] [месяц] [день недели] [абсолютный путь к файлу]
Более наглядно (можно скопировать):
# * * * * * /path/to/job.sh # | | | | | # | | | | +——— день недели (0-6), 0 — воскресенье # | | | +————— месяц (1-12) # | | +——————— день месяца (1-31) # | +————————— часы (0-23) # +——————————— минуты (0-59)
- * — звёздочка обозначает все значения
- , — разделитель значений
- - — диапазон значений
- / — чередование значений
Пять звёздочек — запуск скрипта каждую минуту каждого часа в каждый день месяца во все месяцы и дни недели. Т.е. раз в минуту. Допустимо указывать отдельные числа, диапазоны и несколько диапазонов через запятую. Можно чередовать значения. Например:
30 13 7-8 feb-apr,nov-dec * /path/to/job.sh
Скрипт будет выполняться:
- 7 февраля в 13:30
- 8 февраля в 13:30
- 7 марта в 13:30
- 8 марта в 13:30
- 7 апреля в 13:30
- 8 апреля в 13:30
- 7 ноября в 13:30
- 8 ноября в 13:30
- 7 декабря в 13:30
Полезные команды
Помощь:
man crontab
Список задач текущего пользователя:
crontab -l
Список задач выбранного пользователя:
crontab -u пользователь -l
Резервное копирование списка задач текущего пользователя в текстовый файл:
crontab -l > backup.txt
Восстановление задач из бэкапа в список задач текущего пользователя:
crontab backup.txt
Удаление задач текущего пользователя:
crontab -r
Редактирование задач текущего пользователя:
crontab -e
Если эта команда выполняется в первый раз, вам предложат выбрать редактор:
no crontab for sk - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- простейший 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed
Изначально crontab-файл пустой:
Файлы crontab после их создания находятся здесь:
/var/spool/cron/crontabs
Примеры задач
Выполнять скрипт каждую минуту:
* * * * * /path/to/job.sh
Выполнять скрипт раз в пятнадцать минут:
*/15 * * * * /path/to/job.sh
Выполнять скрипт каждый час в сорок минут:
40 * * * * /path/to/job.sh
Выполнять скрипт в семь утра:
0 7 * * * /path/to/job.sh
Выполнять скрипт в семь утра и семь вечера:
0 7,19 * * * /path/to/job.sh
Выполнять скрипт каждые два часа:
0 */2 * * * /path/to/job.sh
Выполнять скрипт в семь утра по понедельникам:
0 7 * * mon /path/to/job.sh
Выполнять скрипт в семь утра по будням:
0 7 * * 1-5 /path/to/job.sh
Cуществуют готовые задания:
- @reboot — одиночное выполнение команды при загрузке
- @yearly — раз в год (аналог 0 0 1 1 *)
- @annually — тоже раз в год
- @monthly — раз в месяц (аналог 0 0 1 * *)
- @weekly — один раз в неделю (аналог 0 0 * * mon)
- @daily — раз в день (аналог 0 0 * * *)
- @midnight — тоже раз в день
- @hourly — раз в час (аналог 0 * * * *)
Crontab генератор
Если вам лень во всём этом разбираться, то воспользуйтесь онлайн генератором:
Примечание:
cron не работает, если в конце crontab нет перевода строки.