Найти тему

Планировщик задач Cron

Оглавление

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, и сервис покажет, когда будет запущена задача.