Очень часто перед системным администратором встает вопрос как настроить автоматический запуск заданий с помощью 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