Учитывая единичный файл 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
.