systemd - jednostki czasowe naśladujące zachowanie anakronów

13

Muszę napisać jednostkę czasową dla maszyny, która jest często wyłączana (np. Klasyczna konfiguracja pulpitu). Ta jednostka czasowa musi być aktywowana regularnie, ale niezbyt często (np. Co tydzień, co miesiąc).

Znalazłem kilka podejść, ale tak naprawdę nie pasują:

  • Według stron podręcznika man tylko OnBootSeci OnStartupSecdyrektywy zostaną aktywowane, jeśli skonfigurowany punkt czasu jest w przeszłości. Znalazłem również kilka przykładów, używając kombinacji tych z, OnActiveSecaby zdefiniować regularne wydarzenie. Problem polega na tym: Za każdym razem, gdy urządzenie jest uruchamiane, timer aktywuje skonfigurowane urządzenie. Jeśli masz licznik czasu, który powinien uruchamiać się TYLKO tydzień / miesiąc, to zdecydowanie za często. Na przykład: nie chcę, aby moje dzienniki były obracane trzy razy dziennie ...

  • Rozwiązania z OnCalendardyrektywą. Jeśli maszyna zostanie wyłączona w skonfigurowanym momencie (przeważnie o północy, ponieważ jeśli pominiesz godzinę w specyfikacji czasu, domyślnie będzie to 00:00:00), licznik czasu nie zostanie aktywowany po następnym uruchomieniu. Tak przynajmniej rozumiem. Czy to prawda?

Pojawia się więc pytanie:
czy timer z wydarzeniami w kalendarzu jest aktywowany zaraz po następnym uruchomieniu, jeśli skonfigurowany czas jest w przeszłości?
Jeśli nie: czy istnieje sposób obejścia tego problemu?

mmh
źródło
Ok, jestem świadomy tego . Czy to jeszcze droga? A może są bardziej eleganckie rozwiązania? Czy planuje się coś w celu poprawy obecnej sytuacji?
mmh

Odpowiedzi:

15

Ta funkcja została już zaimplementowana w systemd (ver> = 212) przy użyciu Persistent=dyrektywy, więc wystarczy wstawić Persistent=truedo pliku jednostki podczas korzystania z OnCalendar=dyrektywy w celu ustalenia daty / godziny uruchomienia zadania.

Trwały =

Przyjmuje argument boolowski. Jeśli prawda, czas ostatniego uruchomienia jednostki serwisowej jest zapisywany na dysku. Gdy timer jest aktywowany, jednostka serwisowa jest uruchamiana natychmiast, jeśli zostałaby uruchomiona co najmniej raz w czasie, gdy timer był nieaktywny. Jest to przydatne, aby nadrobić zaległości w nieudanych uruchomieniach usługi, gdy maszyna była wyłączona. Zauważ, że to ustawienie ma wpływ tylko na timery skonfigurowane z OnCalendar =.

Pedro
źródło
Czy nie jest odwrotnie? OP prosi o wyeliminowanie dodatkowych przebiegów wynikających z posiadania obu OnBootSeci OnActiveSec. Persistentnależy uruchomić raz podczas rozruchu, jeśli przynajmniej jeden bieg został pominięty z powodu awarii?
x-yuri
Prawdopodobnie miałeś na myśli to w ten sposób .
x-yuri
0

Zgodnie z tym e-mailem na liście dyskusyjnej systemd-devel pożądane zachowanie znajduje się na mapie drogowej i zostanie dodane w przyszłości.

mmh
źródło