timer di sistema ogni 15 minuti


33

Sto cercando di creare un timer di sistema che viene eseguito ogni 15 minuti. In questo momento ho:

  • 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
    

Questo corre ancora e ancora senza fermarsi. Deve essere *:0,15,30,45:*invece? Come posso farlo funzionare?


2
La tua sintassi non significa ogni 15 secondi ?
Pavel Šimerda,

Risposte:


43

La tua sintassi si traduce in ogni 15 secondi , se vuoi ogni 15 minuti , IMO il modo più leggibile è:

OnCalendar=*:0/15

Una risposta molto simile a quella che usi nella tua domanda è:

OnCalendar=*:0,15,30,45

Maggiori informazioni:


3
OnCalendar=0/8:00:00è corretto dire "corri ogni 8 ore"?
Shackra,

4
Sì. Ma probabilmente lo sai già ormai. :)
Pavel Šimerda,

Non l'ho fatto, ma l'ho usato comunque lol. Grazie per la conferma!
Shackra,

OnCalendar=*:0/15dovrebbe tradurre OnCalendar=*:0,15,30,45esattamente (dato che l'ho letto correttamente nei documenti). Ogni 8 ore sarebbe realizzato con OnUnitActiveSec=8hours.
Debilski,

3
Quando si specifica un intervallo, l'output di systemd-analyzepuò tornare utile, ad esempio provare systemd-analyze calendar *:0/15.
sebastian

12

Secondo systemd.time , l'impostazione

OnCalendar=*:0/15

si traduce esattamente in

OnCalendar=*:0,15,30,45

vale a dire. attiva l'unità esattamente all'ora intera, nonché alle ore un quarto, metà e un quarto.

A seconda del servizio, questo potrebbe non essere ciò che desideri, né ciò di cui hai bisogno in tutti i casi.

Un timer che parte ogni 15 minuti , ad esempio 1:02, 1:17, 1:32, 1:47, 2:02, ... - sempre a seconda dell'ultima esecuzione - può essere realizzato con systemd. impostazione del timer

OnUnitActiveSec=15min

Ora, vorrai anche che l'unità si avvii un po 'di tempo dopo l'avvio (a meno che tu non voglia attivare l'unità manualmente o avere una dipendenza che lo fa), quindi dovresti forse specificare

OnBootSec=10min
OnUnitActiveSec=15min

per avviare l'unità 10 minuti dopo l'avvio e poi ogni 15 minuti dopo quella prima volta.

Inoltre, v'è l'impostazione OnUnitInactiveSecche inizia il conteggio del tempo dopo che il servizio è arrestato (o, più in generale, l'unità è inattivato).


1
Attenzione: OnUnitActiveSec sembra essere abbastanza rotto .
Anders Kaseorg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.