systemctl Постоянный таймер и служба при выключении компьютера

Для более поздних читателей:

Devuan — это дистрибутив, который по умолчанию использует sysvinit и включает в себя пакет policykit -1 , который не зависит от systemd. Он в основном совместим с Debian почти во всех отношениях, кроме системы инициализации.

0
15.03.2021, 17:03
2 ответа

Похоже не работает , когда компьютер выключен или нет подключения к интернету, он не догоняет, так как сообщение все еще говорит:

$ systemctl --no-pager status mintupdate-automation-upgrade.timer
...
Trigger: Tue 2021-02-02 00:32:40 CET; 13h left

Таким образом, процесс обновления (по крайней мере с использованием этого метода, возможно, в отличие отunattended-upgrades)является не совсем безопасным .

Если есть возможность исправить, дайте знать?

0
18.03.2021, 22:34

Persistent=применимо только к таймерам (см. man systemd.timer). Вот почему вы не видите его с

systemctl show mintupdate-automation-upgrade.service --property=Persistent

Когда мы смотрим на таймер, он говорит:

[Timer]
OnCalendar=daily
OnStartupSec=60m
RandomizedDelaySec=60m
Persistent=true
  • OnCalendar=daily:Определяет таймеры реального времени (, т.е. настенные часы )с выражением события календаряdaily. что фактически означает, что он будет запускаться в полночь каждую ночь.
  • Persistent=true:означает «Время последнего срабатывания сервисного модуля хранится на диске. При срабатывании таймера сервисный модуль срабатывает немедленно, если он должен был сработать хотя бы один раз за то время, пока таймер был неактивен. запуск, тем не менее, зависит от задержки, налагаемой RandomizedDelaySec=. Это полезно, чтобы наверстать упущенные запуски службы, когда система была выключена».
  • OnStartupSec=60mопределяет таймер относительно момента первого запуска диспетчера служб.
  • RandomizedDelaySec=60mЗадерживает таймер на случайно выбранное, равномерно распределенное время от 0 до 60 минут. Каждый блок таймера будет определять эту задержку случайным образом перед каждой итерацией, и задержка будет просто добавляться к следующему определенному прошедшему времени. Этот параметр полезен для растягивания диспетчеризации аналогично настроенных событий таймера на определенный интервал времени.чтобы предотвратить их одновременное срабатывание, что может привести к перегрузке ресурсов.

Таким образом, если вы оставите машину включенной на ночь, она сработает между полуночью и 01:00. Если вы перезагрузите свою машину, она сработает через 1–2 часа после загрузки. Если вы выключите компьютер на ночь, то утром он сработает в течение 1 часа после загрузки (для триггера OnCalendar/ Persistent), а затем снова в течение 1–2 часов после загрузки (для триггера ). OnStartupSecтриггер ).

Я подозреваю, что вас больше всего беспокоит случай, когда вы загружаете свою машину в 23:00. В этом случае он сработает дважды между 00:00 и 01:00. Когда срабатывает триггер, он будет проигнорирован, если служба oneshotвсе еще находится в состоянии activating, что имеет место, когда ExecStart=все еще работает. Поэтому у вас не будет двух одновременных триггеров одной и той же службы, и, следовательно, это безопасно.

Но тогда вы спрашиваете о минимальном времени между двумя казнями. Обычно мы стараемся не хранить вещи в безопасности со «временем». Это похоже на добавление sleepв сценарий bash, который обычно -работает, когда нам лень слушать соответствующие сигналы(./foo & sleep 5 &&./bar). Это также изменчивый -обходной путь, поскольку нет гарантии, что все будет действительно готово, когда истечет время. Если этот сценарий написан хорошо, он должен выполняться несколько раз подряд без необходимости разделения по времени (./foo &&./foo &&./foo), поэтому вам не нужно беспокоиться о безопасности.

0
18.03.2021, 22:34

Теги

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