Мне нужно написать блок таймера для машины, которая часто выключается (например, классическая настройка рабочего стола). Этот таймер необходимо активировать регулярно, но не очень часто (например, еженедельно, ежемесячно).
Я нашел некоторые подходы, но они все не очень подходят:
По словам мужчины страниц только
OnBootSec
иOnStartupSec
директивы будут активированы , если сконфигурированной момент времени в прошлом. Я также нашел несколько примеров, использующих их комбинациюOnActiveSec
для определения регулярного события. Проблема в том, что при каждой загрузке машины таймер активирует настроенный модуль. Если у вас есть таймер, который должен запускаться ОДИН РАЗ в неделю / месяц, это слишком часто. Например: я не хочу, чтобы мои журналы вращались три раза в день ...Решения с
OnCalendar
директивой. Если машина выключена в заданный момент времени (в основном, в полночь, потому что если вы опустите час в спецификации времени, то по умолчанию будет 00:00:00), таймер не будет активирован после следующей загрузки. По крайней мере, я так понял. Это правильно ?
Поэтому возникает вопрос:
активируется ли таймер с событиями календаря сразу после следующего запуска, если настроенное время уже прошло?
Если нет: есть ли способ обойти такое поведение?
Ответы:
Эта функция уже была реализована в systemd (ver> = 212) с использованием
Persistent=
директивы, поэтому вам просто нужно вставитьPersistent=true
файл модуля при использованииOnCalendar=
директивы, чтобы установить дату / время для запуска задания.источник
OnBootSec
иOnActiveSec
.Persistent
запустить один раз при загрузке, если хотя бы один прогон пропущен из-за сбоя?Согласно этому электронному письму в списке рассылки systemd-devel, желаемое поведение включено в план и будет добавлено в будущем.
источник