В наших материалах посвященных Ubuntu Server время от времени затрагивается вопрос выполнения каких либо задач по расписанию. Чтобы не объяснять каждый раз одно и тоже мы решили создать данный материал, который должен помочь системным администраторам освоить и эффективно использовать планировщик задач в Linux.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
В Ubuntu Server в качестве планировщика задач используется cron - планировщик с интерфейсом командной строки. Он является важной частью системы и начинает функционировать сразу после установки, исполняя различные системные задачи. Наша цель - поставить его себе на службу, тем более это не так сложно как кажется.
Предусмотрено два типа расписаний cron: пользовательское и системное. Отличаются они тем, что первое создается пользователями и исполняется с учетом пользовательских прав, второе используется в административных или системных целях и может быть запущено от имени любого пользователя.
Чтобы создать или изменить пользовательское расписание наберите команду:
crontab -e
При первом запуске утилита предложит выбрать редактор, мы рекомендуем выбирать mcedit (требует установленного mc), либо другой редактор, с которым вы умеете работать.
Формат строк расписания имеет вид:
минута час день месяц день_недели команда
- Минута - время в минутах от 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 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.
Рассмотрим следующий пример записи:
0 8-19/2 * * 1 /home/ivanov/test
Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге Иванова.
Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:
* 10-15 * * * /home/ivanov/test
Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:
0 10-15 * * * /home/ivanov/test
Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.
Кроме даты можно использовать ряд специальных строк:
- @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/ivanov/test
Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.
Для системных и административных задач предусмотрен файл /etc/crontab синтаксис записей в нем отличается наличием дополнительного значения - пользователя, от чьего имени будет запущено задание:
минута час день месяц день_недели пользователь команда
Пример такой записи:
0 19 * * 1-5 root /etc/backup
Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт /etc/backup от имени пользователя root.
Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.
Как видим cron достаточно прост в использовании, но в тоже время предоставляет богатые возможности по настройке расписаний в Ubuntu Server. Надеемся данная статья поможет администраторам освоить данный инструмент.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии