LinuxNotes
← Все статьи

Systemd timers: задачи по расписанию без cron

Создаём пользовательский таймер, проверяем расписание и читаем журнал запусков.

Терминал и автоматизация2 мин чтения

Задача и условия

Создадим безопасный пример: служба раз в день записывает сообщение в журнал. Нужна система с systemd и активный пользовательский сеанс. Root не требуется. После проверки вместо echo можно использовать собственный скрипт с абсолютным путём.

Создайте службу

mkdir -p ~/.config/systemd/user

Сохраните в ~/.config/systemd/user/notes-daily.service:

[Unit]
Description=Linux Notes daily reminder

[Service]
Type=oneshot
ExecStart=/usr/bin/echo Review your backups

Служба выполняет одну команду и завершается. Shell автоматически не запускается: конвейеры и перенаправления в ExecStart не работают как в Bash. Для нескольких действий используйте отдельный исполняемый скрипт.

Добавьте расписание

В том же каталоге создайте notes-daily.timer:

[Unit]
Description=Run the Linux Notes reminder daily

[Timer]
OnCalendar=*-*-* 18:00:00
Persistent=true

[Install]
WantedBy=timers.target

По умолчанию таймер активирует одноимённую службу. Время интерпретируется в локальном часовом поясе. Persistent позволяет выполнить пропущенное календарное срабатывание при следующей активации таймера, а не воспроизводит отдельно все пропущенные дни.

Проверьте до включения

systemd-analyze calendar '*-*-* 18:00:00'
systemctl --user daemon-reload
systemctl --user start notes-daily.service
journalctl --user -u notes-daily.service -n 20 --no-pager

Проверьте следующую дату в выводе первой команды и наличие сообщения в журнале. Успешная oneshot-служба без RemainAfterExit становится inactive, это ожидаемо.

Включение и контроль

systemctl --user enable --now notes-daily.timer
systemctl --user list-timers --all

В списке должны появиться следующее и последнее срабатывания. Автозапуск пользовательского менеджера после загрузки без входа зависит от linger. Этот пример рассчитан на сеанс пользователя; для круглосуточных серверных задач отдельно продумайте системную службу или осознанную настройку linger.

Как отключить

systemctl --user disable --now notes-daily.timer

Команда выключает расписание. Она не прерывает уже запущенную службу. После изменения unit-файлов выполните daemon-reload, а после изменения расписания перезапустите таймер.

Основа: управление службами.

Документация: systemd.timer.

Читайте дальше