Введение / Зачем это нужно
Таймеры systemd — это современная альтернатива cron, которая использует тот же движок, что и системные сервисы. Они позволяют планировать выполнение команд, отправлять уведомления или запускать скрипты по точному расписанию или по событию. Понимание базовых команд и рабочих процессов поможет вам автоматизировать задачи в Linux быстрее и надёжнее.
Требования / Подготовка
- Система на базе Linux с systemd (например, Ubuntu 22.04, Debian 11, Fedora 38, Arch Linux).
- Права root или доступ к
sudo. - Базовые знания работы с терминалом.
Шаг 1: Просмотр списка таймеров
Выполните команду, чтобы увидеть все таймеры, активные и неактивные:
systemctl list-timers --all
В выводе отображаются имена таймеров, время следующего запуска, статус и описание.
Шаг 2: Создание нового таймера
Создайте два файла: таймер-файл (.timer) и сервис-файл (.service). Пример таймера, запускающего скрипт /opt/cleanup.sh ежедневно в 03:00 UTC:
Файл /etc/systemd/system/weekly-cleanup.timer:
[Unit]
Description=Еженедельный очиститель
Requires=weekly-cleanup.service
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Файл /etc/systemd/system/weekly-cleanup.service:
[Unit]
Description=Запуск еженедельной очистки
ExecStart=/opt/cleanup.sh
Шаг 3: Включение и запуск таймера
Перезапустите демон, чтобы он прочитал новые файлы, затем включите и запустите таймер:
systemctl daemon-reload
systemctl enable weekly-cleanup.timer
systemctl start weekly-cleanup.timer
Таймер теперь зарегистрирован и будет запускаться по расписанию.
Шаг 4: Проверка состояния таймера
Убедитесь, что таймер активен:
systemctl status weekly-cleanup.timer
Также проверьте сервис, чтобы увидеть, был ли он запущен при первом срабатывании:
systemctl status weekly-cleanup.service
Если таймер ещё не сработал, вы увидите ожидаемое следующее время запуска.
Шаг 5: Отключение или удаление ненужного таймера
Если таймер больше не нужен, остановите и отключите его:
systemctl stop weekly-cleanup.timer
systemctl disable weekly-cleanup.timer
Для полного удаления удалите файлы таймеров и сервисов:
rm /etc/systemd/system/weekly-cleanup.timer
rm /etc/systemd/system/weekly-cleanup.service
systemctl daemon-reload
Проверка результата
После выполнения необходимых шагов повторно выполните systemctl list-timers --all, чтобы убедиться, что новый таймер отображается как «включён», а старый — как «отключён» или удалён.
💡 Совет: Используйте
systemctl list-timers --human=false --allдля получения краткого вывода, пригодного для скриптов.
Возможные проблемы
- Таймер неактивен. Убедитесь, что файлы расположены в
/etc/systemd/system/(или/lib/systemd/system/), и выполнитеsystemctl daemon-reload. - Таймер запускается сразу. Проверьте
OnCalendarиPersistent=true— последняя строка заставляет таймер запускаться при первом совпадении после перезагрузки. - Сервис не запускается. Проверьте
ExecStartв сервис-файле, права доступа к скрипту (chmod +x /opt/cleanup.sh) и выполнитеsystemctl restart weekly-cleanup.service.
Теперь у вас есть полный набор навыков для управления таймерами systemd — от просмотра существующих до создания, включения, проверки и удаления. Используйте эти команды, чтобы поддерживать автоматизацию в вашей системе Linux эффективной и актуальной.