Как легко прервать автоматическое -обновление или настроить его так, чтобы оно прерывалось автоматически после использования apt -get для обновления?

Существует разница между сбоем «демона» и сбоем «службы».

Сбой демона просто означает, что программа завершилась каким-либо образом, кроме возврата 0 в качестве кода выхода. Это то, на что ссылается Restart=on-failure, т.е. «Перезапустить демон в случае сбоя». Кроме того, вы можете перезапустить при других условиях, см. таблицу в разделе Restart= , которая также объясняет, что именно означает «при -сбое»..

Согласно вашему служебному файлу, нет определения "сервисного" сбоя, и я думаю, что определение по умолчанию в основном таково: "демон вышел каким-то образом, отличным от возврата 0 в качестве кода выхода, И в настоящее время он не запущен", но ваш service немедленно перезапустил демон. Так что он, вероятно, входит в состояние «сбой», но на короткое время вы этого не замечаете. Вы можете проверить журнал с помощью journalctl -u foo.service.

Также следует проверить, остался ли PID основного процесса таким же, каким он был +30 секунд назад. Если PID отличается, это означает, что systemd убивает демона, потому что он никогда не вызывал sd_notify, а затем systemd очень быстро перезапускает демона, потому что ваш служебный файл говорит перезапустить его в случае сбоя и не говорит ему ждать между перезапускает (см. ниже ).

Если вы хотите, чтобы ваш сервис имел определение сбоя, вы можете использовать что-то вроде:

StartLimitInterval=5min
StartLimitBurst=4

Эти параметры подробно описаны здесь , однако в основном эти два значения в данном примере означают: «Запускать демон не более 4 раз за 5-минутный интервал. Если он запущен, а затем, столько раз за этот интервал служба считается в состоянии сбоя". Если это произойдет, то берется StartLimitAction=, по умолчанию это значение отсутствует.

Другим настраиваемым значением является RestartSec=. Из документации :

Configures the time to sleep before restarting a service (as configured with Restart=). Takes a unit-less value in seconds, or a time span value such as "5min >20s". Defaults to 100ms.

Что в основном означает, что systemd должен подождать как минимум RestartSec=перед повторным запуском демона.

Таким образом, вы можете комбинировать все эти параметры, но, допустим, вы используете эти значения:

StartLimitInterval=5min
StartLimitBurst=4
RestartSec=2min

Тогда служба никогда не сможет перейти в состояние сбоя, поскольку определение сбоя таково:

If in a given 5 minute interval, the service has been started, and then failed 4 times.

Но systemd не будет повторно -запускать службу в течение двух минут после последнего сбоя, поэтому она никогда не достигнет StartLimitBurstвнутри StartLimitInterval.

0
10.10.2021, 13:52
1 ответ

Можно выполнить unattended-upgradesво время процесса выключения, что позволит вам выполнить aptв любое время вместо прерывания процесса apt.

Включите эту опцию в/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::InstallOnShutdown "true";

cat /etc/apt/apt.conf.d/50unattended-upgrades:

// Install all updates when the machine is shutting down
// instead of doing it in the background while the machine is running.
// This will (obviously) make shutdown slower.
// Unattended-upgrades increases logind's InhibitDelayMaxSec to 30s.
// This allows more time for unattended-upgrades to shut down gracefully
// or even install a few packages in InstallOnShutdown mode, but is still a
// big step back from the 30 minutes allowed for InstallOnShutdown previously.
// Users enabling InstallOnShutdown mode are advised to increase
// InhibitDelayMaxSec even further, possibly to 30 minutes.
//Unattended-Upgrade::InstallOnShutdown "false";
1
10.10.2021, 17:21

Теги

Похожие вопросы