systemd - единицы таймера, которые имитируют поведение анакрона

13

Мне нужно написать блок таймера для машины, которая часто выключается (например, классическая настройка рабочего стола). Этот таймер необходимо активировать регулярно, но не очень часто (например, еженедельно, ежемесячно).

Я нашел некоторые подходы, но они все не очень подходят:

  • По словам мужчины страниц только OnBootSecи OnStartupSecдирективы будут активированы , если сконфигурированной момент времени в прошлом. Я также нашел несколько примеров, использующих их комбинацию OnActiveSecдля определения регулярного события. Проблема в том, что при каждой загрузке машины таймер активирует настроенный модуль. Если у вас есть таймер, который должен запускаться ОДИН РАЗ в неделю / месяц, это слишком часто. Например: я не хочу, чтобы мои журналы вращались три раза в день ...

  • Решения с OnCalendarдирективой. Если машина выключена в заданный момент времени (в основном, в полночь, потому что если вы опустите час в спецификации времени, то по умолчанию будет 00:00:00), таймер не будет активирован после следующей загрузки. По крайней мере, я так понял. Это правильно ?

Поэтому возникает вопрос:
активируется ли таймер с событиями календаря сразу после следующего запуска, если настроенное время уже прошло?
Если нет: есть ли способ обойти такое поведение?

ММХ
источник
Хорошо, я знаю об этом . Это все еще путь? Или есть более элегантные решения? Планируется ли что-то улучшить текущую ситуацию?
ммч

Ответы:

15

Эта функция уже была реализована в systemd (ver> = 212) с использованием Persistent=директивы, поэтому вам просто нужно вставить Persistent=trueфайл модуля при использовании OnCalendar=директивы, чтобы установить дату / время для запуска задания.

Стойкие =

Принимает логический аргумент. Если true, время, когда сервисный блок последний раз запускался, сохраняется на диске. Когда таймер активирован, сервисный блок запускается немедленно, если он был бы запущен хотя бы один раз за время, когда таймер был неактивен. Это полезно, чтобы наверстать упущенное при обслуживании, когда машина была выключена. Обратите внимание, что этот параметр влияет только на таймеры, настроенные с помощью OnCalendar =.

Pedro
источник
Разве это не наоборот? ОП просит об устранении лишних прогонов, вызванных наличием обоих OnBootSecи OnActiveSec. Persistentзапустить один раз при загрузке, если хотя бы один прогон пропущен из-за сбоя?
x-yuri
Ну, вы, вероятно, имели в виду это так .
x-yuri
0

Согласно этому электронному письму в списке рассылки systemd-devel, желаемое поведение включено в план и будет добавлено в будущем.

ММХ
источник