systemowy zegar co 15 minut

33

Próbuję stworzyć systemowy zegar, który będzie działał co 15 minut. W tej chwili mam:

  • timer-fifteen.timer:

    [Unit]
    Description=15min timer
    
    [Timer]
    OnBootSec=0min
    OnCalendar=*:*:0,15,30,45
    Unit=timer-fifteen.target
    
    [Install]
    WantedBy=basic.target  
    
  • timer-fifteen.target:

    [Unit]
    Description=15min Timer Target
    StopWhenUnneeded=yes
    

To działa w kółko, bez zatrzymywania się. Czy *:0,15,30,45:*zamiast tego musi być ? Jak mogę to zrobić?

Lily Hahn
źródło
2
Czy twoja składnia nie oznacza co 15 sekund ?
Pavel Šimerda

Odpowiedzi:

43

Twoja składnia przekłada się na co 15 sekund , jeśli chcesz co 15 minut , IMO najbardziej czytelnym sposobem jest:

OnCalendar=*:0/15

Odpowiedź najbardziej podobna do tego, czego używasz w swoim pytaniu, to:

OnCalendar=*:0,15,30,45

Więcej informacji:

Pavel Šimerda
źródło
3
OnCalendar=0/8:00:00ma rację mówiąc „uruchomić co 8 godzin”?
shackra
4
Tak. Ale zapewne już to wiesz. :)
Pavel Šimerda
Nie zrobiłem tego, ale i tak użyłem lol. Dziękuję za potwierdzenie!
shackra
OnCalendar=*:0/15powinien tłumaczyć OnCalendar=*:0,15,30,45dokładnie (pod warunkiem, że przeczytałem go poprawnie w dokumentach). Co 8 godzin będzie realizowane OnUnitActiveSec=8hours.
Debilski
3
Przy określaniu interwału wyjście systemd-analyzemoże się przydać, na przykład spróbuj systemd-analyze calendar *:0/15.
Sebastian
12

Zgodnie z czasem systemowym , ustawienie

OnCalendar=*:0/15

przekłada się dokładnie na

OnCalendar=*:0,15,30,45

to znaczy. aktywuje jednostkę dokładnie o pełnej godzinie, a także o kwadrans po drugiej, wpół do drugiej i kwadrans po.

W zależności od usługi może to nie być to, czego chcesz, ani czego nie potrzebujesz we wszystkich przypadkach.

Timer, który działa co 15 minut - na przykład o 1:02, 1:17, 1:32, 1:47, 2:02,… - zawsze w zależności od czasu ostatniego uruchomienia - można wykonać przy pomocy systemd. ustawienie timera

OnUnitActiveSec=15min

Teraz będziesz również chciał, aby urządzenie uruchomiło się jakiś czas po rozruchu (chyba że chcesz ręcznie aktywować urządzenie lub mieć zależność, która to robi), więc może powinieneś określić

OnBootSec=10min
OnUnitActiveSec=15min

uruchomić urządzenie 10 minut po uruchomieniu, a następnie co 15 minut po pierwszym uruchomieniu.

Dodatkowo istnieje ustawienie, OnUnitInactiveSecktóre rozpoczyna odliczanie czasu po zatrzymaniu usługi (lub, bardziej ogólnie, dezaktywacji urządzenia).

Debilski
źródło
1
Ostrzeżenie: OnUnitActiveSec wydaje się być dość zepsute .
Anders Kaseorg