Cron — это программа, которая выполняет задания в рамках указанного расписания. Такой класс программ обычно называют планировщиками задач.
В качестве задач выступают команды из оболочки операционной системы.
Основные возможности:
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/eugene/scripts/backup.sh
каждый день в 23:00.
Открываем редактор с расписанием для текущего пользователя
crontab -e
и добавляем строчку:
0 23 * * * /home/eugene/scripts/backup.sh
В таком случае имя пользователя указывать не нужно.
Второй способ — создать файл с расписанием в каталог /etc/cron.d
— например, /etc/cron.d/site-backup
:
0 23 * * * eugene /home/eugene/scripts/backup.sh
Чтобы cron перечитал файлы с расписаниями, необходимо перезапустить его службу:
service crond restart
Это можно сделать как минимум тремя способами:
#0 23 * * * backup /scripts/backup.sh
Независимо от выбранного способа, для того чтобы cron обновил список действующих расписаний, необходимо перезапустить службу:
service crond restart
Crontab от Cronbox — бесплатный сервис для генерации расписания cron. Достаточно указать расписание в формате cron, и сервис покажет, когда будет запущена задача.