Продолжаем про таймеры в SystemD

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

Задача

Обеспечить запуск скрипта каждые 15 секунд через SystemD.

Подход к решению

  • Создать описание службы SystemD.
  • Убедиться, что служба запускается через SystemD и успешно выполняет свои действия.
  • Создать описание расписания для службы SystemD. Информацию по этому можно найти в man systemd.timer

Как поставить таймер

  1. Сформировать .timer-файл.
  2. Поместить файл в каталог конфигурации SystemD.
  3. Загрзуить описание таймера в SystemD (daemon-reload).
  4. Запустить таймер с помощью systemctl start blah-blah.timer.
  5. Проверить работу таймера с помощью systemctl list-timers.

Как обеспечить запуск таймера после перезагрузки

  1. Добавить в .timer-файл секцию Install
  2. Указать зависимость от цели timers.target.
  3. Перезагрузить описание таймера.
  4. Активировать таймер с помощью systemctl enable.

Дополнительная задача

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

  • Каждый день в 2 часа ночи.
  • Выполнение задачи дважды в день.
  • Выполнение задачи каждую минуту.
  • В воскресенье в 5 вечера.
  • Выполнять задачу только лишь в мае, июне и июле.
  • Выполнять задачу по вечерам среды и пятницы.
  • Выполнять задачу каждые 4 часа.
  • Выполнять задачу дважды в воскресенье и понедельник.
  • Выполнять задачу раз в год.
  • Выполнять задачу 1 раз каждый месяц.

Выполнение действий по расписанию с использованием cron

cron - это специальная служба, которая может выполнять действия по расписанию.

При этом в настоящее время существует множетсво реализаций данной службы, которые поддерживают одинаковый (почти) формат конфигурационных файлов.

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

Где располагаются конфигурационные файлы cron?

К сожалению, их много.

Системные конфигурационные файлы.

  • /etc/crontab - основной конфигурационный файл в формате Cron
  • /etc/cron.d - набор файлов в формате Cron

А в каталогах:

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

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

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

  • crontab -l - посмотреть текущий список задач для текущего пользователя.
  • crontab -e - отредактировать текущий список задач для текущего пользователя.
  • crontab -r - удалить список задач для текущего пользователя.

Вы также можете указать имя пользователя для crontab с помощью ключа -u. Например можно посмотреть для пользователя root: crontab -u root -l - список задач пользователя root.

Формат crontab

Каждая строка - отдельная запись.

Сначала необходимо указать время запуска.

  • Минуты. * - каждая минута, 10 - ровно 10 минут, 12,13 - в 12 и 13 минут, */10 - каждые 10 минут, 5-15 - каждую минуту от 5 до 15. От 0 до 59.
  • Часы. Аналогично минутам. от 0 до 23
  • День месяца. Аналогично минутам. от 1 до 31.
  • Номер месяца. Аналогично минутам. от 1 до 12.
  • День недели. От 0 до 6, где 0 - воскресенье.

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

Задача

Обеспечить запуск скрипта каждые 2 минуты.

  1. Отклчюите таймер Systemd.
  2. Установите службу anacron
  3. Сформируйте файл расписания для скрипта в системном каталоге /etc/cron.d/. Пусть файл называется /etc/cron.d/service.
  4. Добавьте в созданный файл строку с описанием запуска службы от имени пользователя user.
  5. Сохраните файл и удостоверьтесь, что он запускается запускается по расписанию.

Вопросы

  1. Как понять, что формат cron правильный?
  2. Как понять, что то или иное действие выполняется через cron?
  3. Как посмотреть историю запуска службы через cron?