Cron — это программа, которая выполняет задания в рамках указанного расписания. Такой класс программ обычно называют планировщиками задач.
В качестве задач выступают команды из оболочки операционной системы.
Основные возможности:
- Запускать задачи в указанные даты и время.
- Запускать задачи с интервалом — например, раз в 5 минут.
Файловая структура
Cron поддерживает множественные места хранения расписаний. Это сделано для того, чтобы:
- Каждый пользователь мог работать только со своими задачами.
- Разделить выполнение задач тематически. Например, если положить скрипт в каталог /etc/cron.daily, он выполнится 1 раз в сутки.
Главный файл с расписаниями — /etc/crontab.
Тематические каталоги:
- /etc/cron.hourly/* — сценарии, выполняющиеся каждый час.
- /etc/cron.daily/* — сценарии, выполняющиеся каждый день.
- /etc/cron.weekly/* — сценарии, выполняющиеся каждую неделю.
- /etc/cron.monthly/* — сценарии, выполняющиеся каждый месяц.
В тематические каталоги помещаются готовые скрипты, расписание для скриптов не указывается. Если создать скрипт в каталоге /etc/cron.hourly, то он будет запускаться 1 раз в час.
Если нужно сохранить расписание в отдельном файле, то можно поместить его в каталог /etc/cron.d.
Формат записи
Существует 2 формата записи:
- с указанием имени пользователя — используется только для файла crontab, например, вот так:
<минута> <час> <день-месяца> <месяц> <день-недели> <пользователь> <команда>
- без указания — используется для всех остальных случаев.
<минута> <час> <день-месяца> <месяц> <день-недели> <команда>
Если значение поля не важно, то достаточно указать знак «*» (звёздочка). В таком случае cron использует предоставленные значения. Но что будет, если указать для всех временных полей «*»? Cron вызовет команду раз в минуту.
В главном конфигурационном файле /etc/crontab добавлены подсказки в виде комментариев:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
Примеры интервалов
Запускать скрипт для резервного копирования каждый вечер в 23:00 от пользователя backup:
0 23 * * * backup /scripts/backup.sh
Запускать скрипт каждые 15 минут:
*/15 * * * * backup /scripts/fetch.sh
Запускать скрипт только в выходные дни:
*/15 * * * 6-7 backup /scripts/fetch.sh
Запускать скрипт в 5 утра, 1-го числа января и февраля:
5 4 1 1-2 * backup /scripts/fetch.sh
Работа с задачами
Для примера запустим скрипт резервного копирования /home/user/scripts/backup.sh каждый день в 23:00.
Как добавить задачу (способ № 1)
Открываем редактор с расписанием для текущего пользователя
crontab -e
и добавляем строчку:
0 23 * * * /home/user/scripts/backup.sh
В таком случае имя пользователя указывать не нужно.
Как добавить задачу (способ № 2)
Второй способ — создать файл с расписанием в каталог /etc/cron.d — например, /etc/cron.d/site-backup:
0 23 * * * user /home/user/scripts/backup.sh
Применяем настройки
Чтобы cron перечитал файлы с расписаниями, необходимо перезапустить его службу:
service crond restart
Как удалить задачу
Это можно сделать как минимум тремя способами:
- Удалить файл с заданием.
- Удалить строчку из файла.
- Закомментировать строчку.
# 0 23 * * * backup /scripts/backup.sh
Независимо от выбранного способа, для того чтобы cron обновил список действующих расписаний, необходимо перезапустить службу:
service crond restart
Полезные ссылки
- Crontab от Cronbox — бесплатный сервис для генерации расписания cron. Достаточно указать расписание в формате cron, и сервис покажет, когда будет запущена задача.