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

Systemd: как запустить одну службу за другой, запущенной по таймеру, заканчивается?

Цель

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

Стандартный стрейч

Standard stretch загружает обновления и устанавливает их, используя:

Таймеры работают независимо в случайное время дня, поэтому между загрузкой и установкой может пройти почти 24 часа.

Исследования и попытки

apt-daily-upgrade.service модификация

На основе https://superuser.com/questions/1250874/trigger-another-systemd-unit-to-start-before-timer-unit-starts, Я отключил apt-daily-upgrade.timer и изменил apt-daily-upgrade.service, добавив «Wants = apt-daily.service»

После изменения запустил демон systemctl daemon-reload.

24+ часа спустя /var/log/unattended-upgrades/unattended-upgrades.log не показывал, что автоматические обновления были запущены.

модификация apt-daily.service

На основе Связывание пользовательских сервисов systemd, Я понял, что apt-daily.service нужно настроить для запуска apt-daily-upgrade.service, а не apt-daily-upgrade.service, настроенного для запуска после apt-daily.service.

Отказался от модификации apt-daily-upgrade.service и создал /etc/systemd/system/apt-daily.service с добавлением «Before = apt-daily-upgrade.service»:

[Unit]
Description=Daily apt download activities
Documentation=man:apt(8)
ConditionACPower=true
After=network-online.target
Wants=network-online.target
Before=apt-daily-upgrade.service

[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily update

После изменения запустил демон systemctl daemon-reload.

24+ часа спустя /var/log/unattended-upgrades/unattended-upgrades.log не показывал, что автоматические обновления были запущены.

Журнал systemd показывал сообщения «Daily apt download activity», которые, как считается, показывают, что служба apt-daily.service была запущена:

# journalctl | grep 'apt download activities'
Apr 08 16:10:05 web2.iciti.av systemd[1]: Starting Daily apt download activities...
Apr 08 16:10:08 web2.iciti.av systemd[1]: Started Daily apt download activities.
...

Вывод

Как мы можем достичь нашей цели, в идеале в рамках systemd?

Спасибо user228505, это сработало.

/etc/systemd/system/apt-daily.service был изменен на

[Unit]
Description=Daily apt download activities
Documentation=man:apt(8)
ConditionACPower=true
After=network-online.target
Wants=network-online.target
Before=apt-daily-upgrade.service
Wants=apt-daily-upgrade.service

[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily update

Нам это нужно для запуска apt-daily-upgrade.service после завершения работы apt-daily.service (для загрузки всех пакетов перед запуском автоматических обновлений).

Добавление APT :: Periodic :: Verbose "3" в /etc/apt/apt.conf.d/02periodic показало, что он делал то, что мы хотели.

По-видимому, системное сообщение «Начатые ежедневные действия по загрузке» означает «Завершенные ежедневные действия по загрузке», потому что /usr/lib/apt/apt.systemd.daily не возвращается, пока не завершится (в отличие от большинства служебных команд, которые возвращаются, когда они демонизируют) .