Как блок обслуживания 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
- Что происходит в 12:00 каждый день, если отключен foo.service? (это, вероятно, будет начато)
- Что происходит в 12:00 каждый день, если foo.service уже включен? (это будет перезапущено?)
Из прочитанного человеком systemd.timer
Для каждого файла таймера должен существовать соответствующий файл модуля, описывающий модуль, который необходимо активировать по истечении таймера. По умолчанию служба с тем же именем, что и таймер (кроме суффикса), активирована. Пример: файл таймера foo.timer активирует соответствующий сервис foo.service. Активируемое устройство может управляться модулем = (см. Ниже).
- Что значит активировать foo.service? Означает ли это перезагрузить или убедиться, что он уже запущен?
1 ответ
Обычно 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
,