Полный цикл в digital

Использование Cron

Для работы с планировщиком в системе есть ряд команд, помогающих решать основные задачи.

Открыть конфигурационный файл:

crontab -e

Показывает список задач из конфигурационного файла:

crontab -l 

Удалить конфигурационный файл вместе со всеми запланированными задачами:

crontab -r

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

сrontab -v

Первичная настройка

Планировщик черпает параметры для выполнения своих задач из crontab-файлов (таблиц с расписанием). У каждого пользователя, включая root, должен быть свой crontab-файл. По умолчанию он не существуют, поэтому придется создать его вручную. Для этого существует команда, которая автоматически генерирует таблицу в директории /var/spool/cron:

crontab -e

Вновь созданный файл будет пустым текстовым полем. Необходимо добавлять в него все параметры самостоятельно с нуля, опираясь на синтаксис. Если нужно открыть файл в любимом редакторе, нужно воспользоваться командой:

EDITOR=nano crontab -e

Либо поменять редактор по умолчанию в операционной системе:

export EDITOR=nano

Ограничения

У Cron есть функция установки ограничений на использование, задающихся через два специальных файла:

  1. cron.allow
  2. cron.deny

Первый файл находится в директории /usr/lib/cron/cron.allow и содержит в себе список учетных записей, которые имеют право на планирование задач с помощью встроенных системных утилит.

Второй файл находится в директории /usr/lib/cron/cron.deny. В нем указываются имена пользователей, которые не могут запускать встроенный в систему планировщик задач.

Если первого файла не существует, то любой пользователь может планировать задачи с помощью встроенного в систему планировщика, но только при условии, что его имени нет во втором файле. Если удалить оба файла, то каждый пользователь сможет планировать задачи без ограничений.

Синтаксис

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

Чтобы запланировать задачу, вам нужно открыть ваш файл crontab для редактирования и добавления задачи, написанной в форме выражения cron.

Синтаксис выражений cron можно разбить на два элемента:

  1. расписание
  2. команда для запуска

Команда может быть любой, которую тоько можно запустить в командной строке. Расписание в синтаксисе разбито на 5 разных полей, которые расположены в следующем порядке:

  1. минуты 0-59
  2. часы 0-23
  3. день месяца 1-31
  4. месяц 1-12
  5. день недели 0-6

Все вместе выглядят следующим образом:

минуты часы день_месяца месяц день_недели команда

Также существует несколько специальных символов, которые вы можете включить в компонент расписания выражения cron, что упрощает создание расписания:

  1. * в выражениях cron звездочка служит подстановочным символом, который представляет все значения. Таким образом, задача, запланированная в форме * * * * *, будет запускаться каждую минуту, каждый час, каждый день каждого месяца
  2. , запятые разбивают значения расписания для получения списка. Если вы хотите запускать задачу в начале и середине каждого часа, а не выполнять две отдельные задачи 0 * * * * и 30 * * * *, вы можете добиться той же функциональности с помощью одного выражения 0,30 * * * *
  3. - дефис представляет диапазон значений в поле расписания. Вместо создания 30 отдельных запланированных задач для команды, которую вы хотите запускать первые 30 минут каждого часа 0 * * * *, 1 * * * *, 2 * * * * и т.д., вы можете просто запланировать его следующим образом: 0-29 * * * *
  4. / вы можете использовать косую черту со звездочкой для выражения значения шага. Например, вместо написания восьми отдельных задач cron для запуска команды каждые три часа 0 0 * * *, 0 3 * * *, 0 6 * * * и т.д., вы можете задать расписание для запуска следующим образом: 0 */3 * * *

Нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Самый простой пример, запускать его каждую минуту:

* * * * * /usr/local/bin/serve

Будем запускать наш скрипт, каждый час в нулевую минуту:

0 * * * * /usr/local/bin/serve

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

Если идти так дальше, то можно запускать в первый день каждого месяца:

0 0 1 * * /usr/local/bin/serve

В любой день, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

Можно выбрать любую минуту, час, день недели, например, 15.30 во вторник:

30 15 * * 2 /usr/local/bin/serve

Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:

30 15 * * sun /usr/local/bin/serve

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

0 7-19  * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель ,. Запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16  * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта /:

*/10 * * * * /usr/local/bin/serve

Кроме того, для некоторых часто используемых наборов были придуманы переменные:

  • @reboot при загрузке, только один раз
  • @yearly, @annually раз год
  • @monthly раз в месяц
  • @weekly раз в неделю
  • @daily, @midnight каждый день
  •  @hourly каждый час

Вот так просто будет выглядеть команда запуска скрипта раз в час:

@hourly /usr/local/bin/serve

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

Отладка работы

После того как вы настроили правила, нужно проверить работают ли они. Для этого ждем время, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. У меня в crontab есть такая строка:

* * * * * /usr/local/bin/serve

Смотрим лог:

nano /var/log/cron

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут было бы выведено сообщение:

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг