Как настроить автоматический запуск заданий с помощью Cron

Очень часто перед системным администратором встает вопрос как настроить автоматический запуск заданий с помощью Cron,  мы попытаемся ответить на него с помощью простых примеров.

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

Для использования службы cron, необходимо, чтобы был установлен RPM-пакет vixie-cron и работала служба crond. Чтобы определить, установлен ли этот пакет, выполните команду rpm -q vixie-cron. Чтобы определить, работает ли служба, воспользуйтесь командой

/sbin/service crond status

Все созданные пользователями файлы crontab, хранятся в каталоге /var/spool/cron и выполняются, от имени создавшего их пользователя.

 

Формат основного файла конфигурации Linux Cron — Crontab

MIN   HOUR   DOM   MON   DOW   CMD

MIN — Minute field — любое целое число от 0 до 59

HOUR — Hour field — любое целое от 0 до 23

DOM — Day of Month — любое целое от 1 до 31 (день должен быть корректным, если указан месяц)

MON — Month field — любое целое от 1 до 12 (или короткое название месяца, например: jan, feb и так далее)

DOW — Day Of Week —  любое целое от 0 до 7, где 0 или 7 означает Воскресенье (или короткое название дня недели, например: sun, mon и так далее)

CWD — Command — команда, которая должны быть выполнена. Командой может быть как простая команда, так и команда запуска написанного вами специального сценария.

 

Пример настройки задания Cron для однократного выполнения в определенное время

Пример запуска скрипта, выполняющего резервное копирование, расположенного в каталоге /root/scripts/backup.sh и который нам нужно запустить 11 января 06:15

15 06 11 01 * /root/scripts/backup.sh

15 — 15 минута

06 — 6 часов

11 — 11 число

01 — первый месяц (январь)

* — каждый день недели

 

Пример настройки задания Cron для выполнения несколько раз

Пример запуска скрипта, выполняющего ежедневное инкрементное резервное копирование в 06:00 и в 18:00, расположенного в каталоге /root/scripts/incremental-backup.sh

00 06,18 * * * /root/scripts/incremental-backup.sh

00 — нулевая минута часа

06,18 — 6 часов и 18 часов

* — каждый день

* — каждый месяц

* — каждый день недели

 

Пример настройки задания Cron для выполнения в определенный промежуток времени

Пример запуска скрипта, выполняющего резервное копирование базы данных каждый час с 09:00 до 18:00, расположенного в каталоге /root/scripts/db-backup.sh

00 06-18 * * * /root/scripts/db-backup.sh

00 — нулевая минута часа

06-18 — 6 часов, 7 часов, 8 часов, 9часов, 10 часов, 11 часов, 12 часов, 13 часов, 14 часов, 15 часов, 16 часов, 17 часов, 18 часов

* — каждый день

* — каждый месяц

* — каждый день недели

 

Пример настройки задания Cron для выполнения в определенный промежуток времени и в определенные дни недели

Пример запуска скрипта, выполняющего резервное копирование базы данных только в рабочие дни (с понедельника по пятницу) каждый час с 09:00 до 18:00, расположенного в каталоге /root/scripts/db-backup.sh

00 09-18 * * 1-5 /root/scripts/db-backup.sh

00 — нулевая минута часа

09-18 — 9часов, 10 часов, 11 часов, 12 часов, 13 часов, 14 часов, 15 часов, 16 часов, 17 часов, 18 часов

* — каждый день

* — каждый месяц

1-5 — Понедельник, вторник, среда, четверг, пятница

 

Как просмотреть записи Crontab для текущего пользователя

Просмотреть записи crontab для текущего пользователя можно с помощью команды crontab -l

[user@myhost]# crontab -l
*/5 * * * * /root/scripts/check-db-status.sh

 

Как посмотреть записи Crontab для root

Для этого нужно войти как root (выполнив su)  и выполнить команду crontab -l

[root@myhost]# crontab -l
no crontab for root

 

Как посмотреть записи Crontab для любого другого пользователя

Для этого нужно войти как root (выполнив su)  и выполнить команду crontab -u {username} -l

[root@myhost]# crontab -u peter -l
*/5 * * * * /home/peter/scripts/check-db-status.sh

 

Как отредактировать запись Crontab

Для редактирования crontab используйте команду crontab -e.  Вы отредактируете crontab текущего пользователя.

[user@myhost]# crontab -e
 */5 * * * * /root/scripts/check-db-status.sh
 ~
 ~
 ~
 "/tmp/crontab.kQQEJY" 1L, 58C

Редактирование происходит с помощью редактора, указанного в значении переменной окружения VISUAL или EDITOR, и по умолчанию им является текстовый редактор vi. Мы настоятельно рекомендуем вспомнить его команды)), и между прочим напомним, что команда :wq сохраняет файл со сделанными изменениями, а затем выходит из редактора vi.

 

Как отредактировать запись Crontab root

Как и в случае с просмотром записи Crontab для root, для ее редактирования, нужно войти как root (выполнив su)  и выполнить команду crontab -е

[root@myhost]# crontab -e

 

Как отредактировать запись Crontab любого другого пользователя

Как и в случае с просмотром записи Crontab для любого другого пользователя, для ее редактирования, нужно войти как root (выполнив su)  и выполнить команду crontab -u {username} -е

[root@myhost]# crontab -u peter -e
*/5 * * * * /home/peter/scripts/check-db-status.sh
~
~
~
"/tmp/crontab.kQQEJY" 1L, 58C

 

Пример настройки задания Cron для выполнения каждые 5 минут

Для выполнения задания каждые 5 минут нужно добавить следующую запись в crontab

*/5 * * * * /root/scripts/check-db-status.sh

*/5 — выполнение задания каждые 5 минут

* —  каждый час

* — каждый день

* — каждый месяц

* — каждый день недели

0-20/5 — такое выражение в поле минуты будет выполнять задание от 0 до 20 минуты через каждые 5 минут, то есть, в нашем случае 0 минут, 5 минут, 10 минут, 15 минут, 20 минут.

 

Пример настройки задания Cron с использованием ключевых слов

При настройке задания, возможно вместо комбинации пяти полей указывать особое слово в формате @keyword  — где оно может принимать следующие значения reboot, midnight, yearly, hourly.

Эквивалент таких слов в виде пяти полей будет выглядеть как

@yearly — 0 0 1 1 *

@daily — 0 0 * * *

@hourly — 0 * * * *

@reboot — Run at startup

 

Пример настройки задания Cron с использованием @yearly

Следующий пример задания Cron будет выполняться в 00:00 01 января каждого года, и может как выполнять обслуживание системы так и отправлять поздравления

@yearly /root/scripts/happy-new-year.sh

 

Пример настройки задания Cron с использованием @monthly

Следующий пример задания Cron будет выполняться в 00:00 каждого 01 числа каждого месяца года

@monthly /root/scripts/db-monthly-backup.sh

 

Пример настройки задания Cron с использованием @daily

Следующий пример задания Cron будет выполняться в 00:00 ежедневно

@daily /root/scripts/db-daily-backup.sh

 

Пример настройки Cron для выполнения произвольной команды после перезагрузки системы

Для однократного выполнения произвольной команды после перезагрузки системы в crontab нужно добавить запись

@reboot CMD

CMD — наша произвольная команда, выполняться она соответственно будет  от имени создавшего запись в crontab пользователя.

 

Можно ли запускать задание с помощью Cron каждую секунду?

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

 

Добавление заданий Cron из файла без редактирования Crontab

Существует возможность добавлять задания Cron без непосредственного редактирования Crontab, используя для этого файл. Для этого все задания вносятся в файл и уже после добавляются в Cron следующим образом

[user@myhost]# crontab -l
no crontab for user
[user@myhost]# cat cron-file.txt
@yearly /home/user/maintenance
*/10 * * * * /home/user/check-disk

[user@myhost]# crontab cron-file.txt

[user@myhost]# crontab -l
@yearly /home/user/maintenance
*/10 * * * * /home/ramesh/check-disk