Назад | Перейти на главную страницу

Как активируется сервисный блок systemd с помощью таймера?

Учитывая единичный файл foo.service

# /etc/systemd/system/foo.service
[Service]
ExecStart=/opt/bin/foo --prod

И юнит-файл foo.timer

# /etc/systemd/system/foo.timer
[Timer]
OnCalendar=*-*-* 12:00:00

[Install]
WantedBy=timers.target

Из чтения man systemd.timer

Для каждого файла таймера должен существовать соответствующий файл блока, описывающий блок, который активируется по истечении таймера. По умолчанию служба с тем же именем, что и таймер (за исключением суффикса), является активирован. Пример: файл таймера foo.timer активирует соответствующую службу foo.service. Активируемым устройством можно управлять с помощью Unit = (см. Ниже).

Обычно systemd обслуживание таймера - это oneshot или simple (по умолчанию) тип запуска, что означает, что служба выполняет команду и после этого завершает работу.
Во время выполнения команды, подаваемой с ExecStart, агрегат имеет состояние active (running) и при выходе что-то вроде inactive (dead).

При использовании таймеров вы не активируете услугу с помощью systemctl enable --now foo.service а лучше включить соответствующий таймер systemctl enbale --now foo.timer.
То, что делает таймер, более или менее systemctl start foo.service в указанное время.


  • Что происходит в 12:00 каждый день, если foo.service отключен? (наверное, запустится)

В foo.service будет запущен, но не включен (автоматический запуск при загрузке).

  • Что происходит каждый день в 12:00, если служба foo.service уже включена? (он будет перезапущен?)

Если услуга находится в active (running) состояние ничего не будет. systemd не будет пытаться запустить службу, если она уже запущена.

  • Что значит активировать foo.service? Означает ли это перезапуск или убедитесь, что он уже запущен?

Активировать услугу - значит запустить ее, например systemctl start foo.service.