Таймеры SystemD и Cron
Продолжаем про таймеры в SystemD
Напишем простой скрипт, который будет создавать файлы в случае его успешного запуска.
Задача
Обеспечить запуск скрипта каждые 15 секунд через SystemD.
Подход к решению
- Создать описание службы SystemD.
- Убедиться, что служба запускается через SystemD и успешно выполняет свои действия.
- Создать описание расписания для службы SystemD. Информацию по этому можно найти в
man systemd.timer
Как поставить таймер
- Сформировать .timer-файл.
- Поместить файл в каталог конфигурации SystemD.
- Загрзуить описание таймера в SystemD (daemon-reload).
- Запустить таймер с помощью
systemctl start blah-blah.timer
. - Проверить работу таймера с помощью
systemctl list-timers
.
Как обеспечить запуск таймера после перезагрузки
- Добавить в .timer-файл секцию Install
- Указать зависимость от цели
timers.target
. - Перезагрузить описание таймера.
- Активировать таймер с помощью
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 минуты.
- Отклчюите таймер Systemd.
- Установите службу
anacron
- Сформируйте файл расписания для скрипта в системном каталоге
/etc/cron.d/
. Пусть файл называется/etc/cron.d/service
. - Добавьте в созданный файл строку с описанием запуска службы от имени пользователя
user
. - Сохраните файл и удостоверьтесь, что он запускается запускается по расписанию.
Вопросы
- Как понять, что формат cron правильный?
- Как понять, что то или иное действие выполняется через cron?
- Как посмотреть историю запуска службы через cron?