Timer
Содержание
Выполнение задач по расписанию
Введение
Эта статья описывает, как выполнять задачи по расписанию в операционных системах ROSA Fresh/Хром.
Таймеры systemd: регулярное выполнение задачи по расписанию
Systemd timer — это компонент systemd, который позволяет запускать задачи (unit) в определенное время или с определенной периодичностью.
Таймеры systemd полезны для автоматизации запуска определенных задач на сервере в заданные моменты времени или с определенной периодичностью, в зависимости от потребностей.
Отличие systemd timer от cron заключается в том, что в случае с timer systemd полностью контролирует выполнение задачи, позволяет ее досрочно остановить, запоминает статус исполнения, предотвращает дубликаты (например, запуск нового экземпляра задачи, когда как еще не остановился предыдущий).
Пример настройки systemd timer для запуска скрипта каждый день в 3 часа утра:
Создайте файл таймера в каталоге /etc/systemd/system/ с расширением .timer, например myscript.timer:
[Unit] Description=My script timer [Timer] OnCalendar=*-*-* 03:00:00 Unit=myscript.service [Install] WantedBy=timers.target
Создайте файл сервиса для запуска скрипта, например myscript.service:
[Unit] Description=My script [Service] ExecStart=/path/to/myscript.sh
Добавьте User=username в раздел [Service], если нужно запускать задачу не от root, а от другого пользователя — username.
Запустите и активируйте таймер:
sudo systemctl daemon-reload sudo systemctl enable myscript.timer sudo systemctl start myscript.timer
Еще несколько примеров значений параметра OnCalendar, задающего периодичность запуска задачи:
- Запуск задачи каждую минуту:
OnCalendar=* * * * *
- Запуск задачи каждый час в первую минуту:
OnCalendar=* * * * 1
- Запуск задачи каждые два часа:
OnCalendar=* */2 * * *
Подробнее смотрите в man systemd.timer
.
atd: одноразовое выполнение задачи в заданное время
atd (at daemon) - это программа в Linux, которая позволяет запускать задачи на выполнение в определенное время.
Вот простая инструкция по использованию atd:
Установите atd, если его нет на вашей системе:
sudo dnf install at
Запустите службу atd и добавьте ее в автозапуск при загрузке ОС:
sudo systemctl enable --now atd
Убедитесь, что она запустилась и работает:
sudo systemctl status atd
Создайте задачу для запуска в определенное время. Например, чтобы запустить скрипт /path/to/myscript.sh в 2 часа ночи:
echo "/path/to/myscript.sh" | at 2am
Чтобы просмотреть список запланированных задач:
atq
Чтобы удалить задачу из очереди на выполнение:
atrm <номер задачи>
Чтобы просмотреть вывод задачи после ее выполнения:
at -c <номер задачи>
Несколько дополнительных примеров:
Запуск задачи в определенное время, указывая дату и время полностью:
echo "/path/to/myscript.sh" | at 2023-03-11 03:00
Запуск задачи через несколько минут:
echo "/path/to/myscript.sh" | at now + 5 minutes
Запуск задачи через несколько часов:
echo "/path/to/myscript.sh" | at now + 3 hours
Запуск команды shell в заданное время:
echo "ls /tmp > /home/user/tmp.log" | at 2am tomorrow
cron: устаревший механизм регулярного выполнения задач по расписанию
cron — это программа в Linux, которая позволяет запускать задачи в определенное время или периодически. Рекомендуется использовать таймеры systemd вместо cron, если нет очень везких причин использовать cron и если вы плохо понимаете разницу между ними.
Установите демон cron:
sudo dnf install cronie
Запустите его и добавьте в автозапуск службу crond:
sudo systemctl enable --now crond
Убедитесь, что он работает:
sudo systemctl status crond
От нужного пользователя (того, от которого нужно выполнять задачу, в т.ч. root) выполните команду для редактирования списка задач cron:
crontab -e
Добавьте задачу, которую нужно запустить (по одной задаче на строку). Например, чтобы запустить скрипт /path/to/myscript.sh каждый день в 3 часа утра:
0 3 * * * /path/to/myscript.sh
Эта конфигурация запустит скрипт каждый день в 3 часа утра. Для редактирования используются следующие параметры:
- минуты (от 0 до 59)
- часы (от 0 до 23)
- день месяца (от 1 до 31)
- месяц (от 1 до 12)
- день недели (от 0 до 7, где 0 и 7 - воскресенье)
Сохраните и закройте файл.
Чтобы просмотреть список задач cron:
crontab -l
Чтобы удалить задачу из списка:
crontab -r
Несколько дополнительных примеров:
Запуск задачи каждый понедельник в 8 часов утра:
0 8 * * 1 /path/to/myscript.sh
Запуск задачи каждый час:
0 * * * * /path/to/myscript.sh
Запуск задачи каждые 15 минут:
*/15 * * * * /path/to/myscript.sh
Запуск задачи в 12 часов ночи каждого 1-го числа месяца:
0 0 1 * * /path/to/myscript.sh