В Ubuntu и CentOS в качестве планировщика задач используется cron — планировщик с интерфейсом командной строки. Он является важной частью системы и начинает функционировать сразу после установки, исполняя различные системные задачи. Наша цель — поставить его себе на службу, тем более это не так сложно как кажется.
Предусмотрено два типа расписаний cron: пользовательское и системное. Отличаются они тем, что первое создается пользователями и исполняется с учетом пользовательских прав, второе используется в административных или системных целях и может быть запущено от имени любого пользователя.
Запускаем crontab на изменение расписания
crontab -e
Просмотр списка расписаний
crontab -l
Формат строк расписания имеет вид:
минута час день месяц день_недели команда
- Минута — время в минутах от 0 до 59
- Час — от 0 до 23
- День — день месяца от 1 до 31
- Месяц — от 1 до 12 либо буквенные обозначения jan — dec
- День недели — от 0 до 6 (0 — воскресенье) или sat — sun
- Команда — строка в формате командного интерпретатора которая будет исполнена, допускается запись типа команда1 && команда2 для запуска нескольких команд подряд.
Значения минут, часов, дней можно указывать следующим образом:
- Значение — число обозначающее дату или время, допускается подстановочный знак * допускающий полный диапазон значений
- Несколько значений — допускается указывать несколько значений через запятую, например 2,14,22
- Диапазон значений — указывается через дефис, например 2-10
- Шаг значений — указывается через дробь, в знаменатель которой ставится шаг, например */3 — каждое третье значение 0, 3, 6, 9 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.
Рассмотрим пример записи:
* * * * * /home/sc.sh
Запуск cron задания каждую минуту
*/5 * * * * /home/sc.sh
Запуск cron задание каждые 5 минут
0 */3 * * * /home/sc.sh
Запуск cron задания каждые 3 часа»
30 2 * * * /home/sc.sh
Запуск cron задания каждый день в 2:30
0 0 * * 0 /home/sc.sh
Запуск cron задания каждое Воскресенье
0 8-17/4 * * 1 /home/sc.sh
Она означает что каждый второй час с 8 до 17 (8,12,16) по понедельникам запускать скрипт sc.sh в домашнем каталоге.
0 0 1 * * /home/sc.sh
Запуск cron задания в первый день каждого месяца
* 8-20 * * * /home/sc.sh
Запуск cron задания каждый год первого Января
0 0 1 1 * /home/sc.sh
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 8 до 20 часов. Правильно будет:
0 8-20 * * * /sc.sh
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
роме даты можно использовать ряд специальных строк:
- @reboot — выполнять команду при перезагрузке
- @yearly или @annually — выполнять 1 января, аналогично записи: «0 0 1 1 * «
- @monthly — выполнять 1 числа каждого месяца, аналогично «0 0 1 * * «
- @weekly — выполнять каждое воскресенье, равносильно «0 0 * * 0«
- @daily или @midnight — ежедневно в полночь,»0 0 * * * «
- @hourly — раз в час, «0 * * * * «
Так для ежедневного исполнения нашего скрипта каждую полночь можно написать
@midnight /home/sc.sh
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.