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


13

Мені потрібно написати блок таймера для машини, яка часто повертається (наприклад, класичне налаштування робочого столу). Цей блок таймера потрібно активувати регулярно, але не дуже часто (наприклад, щотижня, щомісяця).

Я знайшов деякі підходи, але всі вони не дуже відповідають:

  • Відповідно до підручних сторінок активуються лише директиви OnBootSecта OnStartupSecдирективи, якщо налаштований момент часу минув. Я також знайшов кілька прикладів, використовуючи комбінацію цих елементів OnActiveSecдля визначення регулярної події. Проблема полягає в тому, що кожного разу при завантаженні машини таймер активує налаштований блок. Якщо у вас є таймер, який повинен запускатись ТОЧИЙ тиждень / місяць, це занадто часто. Наприклад: я не хочу тричі в день повертати свої журнали ...

  • Рішення з OnCalendarдирективою. Якщо машина вимкнена в налаштований момент часу (в основному опівночі, тому що якщо ви опустите годину в специфікації часу, вона за замовчуванням до 00:00:00), таймер не буде активовано після наступного завантаження. Так принаймні, як я це отримав. Це так ?

Ось тут виникає питання:
чи таймер з подіями календаря активується відразу після наступного запуску, якщо налаштований час минув?
Якщо ні: чи існує рішення для такої поведінки?


Добре, я знаю це . Це все-таки шлях? Або є більш елегантні рішення? Чи планується щось покращити ситуацію, що склалася?
ммх

Відповіді:


15

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

Постійний =

Приймає логічний аргумент. Якщо це правда, час, коли востаннє спрацьовував сервісний блок, зберігається на диску. Коли таймер активований, сервісний блок спрацьовує негайно, якби він був запущений принаймні один раз за час, коли таймер був неактивним. Це корисно, щоб наздогнати пропущені пробіжки служби, коли машина була вимкнена. Зауважте, що це налаштування впливає лише на таймери, налаштовані на OnCalendar =.


Чи не навпаки? ОП запитує про усунення зайвих запусків, що є наслідком наявності обох OnBootSecі OnActiveSec. Persistentце запустити один раз під час завантаження, якщо хоча б один пробіг був пропущений через те, що він не працює?
x-yuri

Ну, напевно, ви мали на увазі саме так .
x-yuri

0

Відповідно до цього електронного листа в списку розсилки systemd-devel потрібна поведінка є в дорожній карті та буде додана в майбутньому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.