Планировщики событий cron и at в Linux

Опубликовано: 7 Апрель, 2015 в разделе: Обучение

Системному администратору иногда приходится планировать периодические действия в своей практике, например резервное копирование, ротацию журнальных файлов, проверку антивирусом или очистку временных каталогов. Одним словом какие-то действия, которые выполняются в конкретное время-дату.

Планировщик Cron и файлы crontab

Конфигурационный файл crontab расположен в /etc/crontab

Конфигурационный файл crontab

Конфигурационный файл crontab

Надо сказать, как здесь описывается конкретное событие. Всего имеется 6 полей.

  1. поле — минуты. Указывается числовое значение от 0 до 59. Можно укзать символ *, тогда это будет обозначать «каждая». Если нужно перечислить несколько вариантов, то это нужно сделать через запятую. Например, если каждые 10 минут, то можно сделать так: 0,10,20,30,40,50, а можно указать */10.
  2. поле — часы. Аналогично, как и для минут, только значения от 0 до 23.
  3. поле — число месяца. Принимает значение от 1 до 31. А так — все то же самое.
  4. поле — месяцы. Значения от 1 до 12.
  5. поле — день недели. От 0 до 7, где воскресенье — это 0 и 7.
  6. поле — команда. Самое важное — эта команда будет выполнена, когда совпадут все значения указанные в полях времени;

Итак, выходит, что демон cron каждую минуту проверяет, нет ли заданий, запланированных на это время. И если есть — выполняет команду.

Нужно быть очень внимательным, указывая время выполнения, иначе это может привести к непредсказуемым последствиям.

Например, нам нужно поставить резервное копирование каталога на 2 часа ночи (утрирую):

0 2 * * * cp /katalog/ /backup/

Но если бы мы случайно забыли в минутах поставить 0, а оставили *, то копирование выполнялась бы 60 раз (раз в минуту), когда на часах 2 часа. Так же можно формировать различные комбинации.

0 2 * * 0 action

выполняет раз в неделю, в воскресенье в 2 часа.

59 1 */3 * * action

Выполняет каждый третий день, в 1:59. И так далее.

Добавить новую запись можно так:

# crontab -e

У нас откроется обычный текстовый редактор, в котором нужно указать 6 вышеуказанных полей.

 

Пишем задание в crontab

Пишем задание в crontab

В конце обязательно добавим пустую строку!

Само-собой создадим файлик backup.sh:

/bin/tar -cvzf /root/backup.tgz /var/www/linux-my.ru/

Само-собой не забываем выставить флаг исполнения:

# chmod +x backup.sh

Проходит назначенное время и мы увидим:

Каталог файлов

Каталог файлов

Кстати, удалить задания или просмотреть их можно тут /var/spool/cron/. Задания, добавленные от root будут в файле root.

Подробнее я рассматривал тут

Планировщик at

Как мы уже заметили, планировщик cron неплохо справляется с периодическими заданиями. А что, если нужно запланировать разовое действие на будущее? Для этих целей подойдёт инструмент at.

Принцип действия прост.

# at -f backup.sh 2:45pm

И у нас в 2:45 дня запустится скрипт backup.sh. Аналогично можно указывать время так: now+2minutes — через две минуты. И т.д.

Просмотреть список заданий на очередь можно так:

# atq

Каждому заданию присваивается номер, который будет видно в очереди на выполнение. По этому номеру задание можно и удалить:

# atrm 4

Таким образом, имея целых два планировщика можно значительно автоматизировать свою деятельность, создавая периодические или разовые задания. Безусловным преимуществом здесь будет знание bash или иного языка оболочки.

Кстати, если нужно найти задания, добавленные в at, то они лежат в /var/spool/at/
Подробнее я расписывал на сайте

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.