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ć?
Odpowiedzi:
Twoja składnia przekłada się na co 15 sekund , jeśli chcesz co 15 minut , IMO najbardziej czytelnym sposobem jest:
Odpowiedź najbardziej podobna do tego, czego używasz w swoim pytaniu, to:
Więcej informacji:
źródło
OnCalendar=0/8:00:00
ma rację mówiąc „uruchomić co 8 godzin”?OnCalendar=*:0/15
powinien tłumaczyćOnCalendar=*:0,15,30,45
dokładnie (pod warunkiem, że przeczytałem go poprawnie w dokumentach). Co 8 godzin będzie realizowaneOnUnitActiveSec=8hours
.systemd-analyze
może się przydać, na przykład spróbujsystemd-analyze calendar *:0/15
.Zgodnie z czasem systemowym , ustawienie
przekłada się dokładnie na
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
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ć
uruchomić urządzenie 10 minut po uruchomieniu, a następnie co 15 minut po pierwszym uruchomieniu.
Dodatkowo istnieje ustawienie,
OnUnitInactiveSec
które rozpoczyna odliczanie czasu po zatrzymaniu usługi (lub, bardziej ogólnie, dezaktywacji urządzenia).źródło
OnUnitActiveSec
wydaje się być dość zepsute .