temporizador systemd cada 15 minutos

33

Estoy tratando de hacer un temporizador systemd que se ejecute cada 15 minutos. En este momento tengo:

  • 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
    

Esto se ejecuta una y otra vez sin parar. ¿Tiene que ser *:0,15,30,45:*en su lugar? ¿Cómo puedo hacer que esto funcione?

Lily Hahn
fuente
2
¿Su sintaxis no significa cada 15 segundos ?
Pavel Šimerda

Respuestas:

43

Su sintaxis se traduce en cada 15 segundos , si lo desea cada 15 minutos , la OMI es la forma más fácil de leer:

OnCalendar=*:0/15

Una respuesta más similar a la que usa en su pregunta es:

OnCalendar=*:0,15,30,45

Más información:

Pavel Šimerda
fuente
3
OnCalendar=0/8:00:00es correcto decir "correr cada 8 horas"?
shackra
44
Sí. Pero probablemente ya lo sepas ahora. :)
Pavel Šimerda
No lo hice, pero lo usé de todos modos jajaja. ¡Gracias por confirmar!
Shackra
OnCalendar=*:0/15debería traducirse OnCalendar=*:0,15,30,45exactamente (dado que lo leí correctamente en los documentos). Cada 8 horas se realizaría con OnUnitActiveSec=8hours.
Debilski el
3
Al especificar un intervalo, la salida de systemd-analyzepuede ser útil, por ejemplo, intente systemd-analyze calendar *:0/15.
Sebastian
12

De acuerdo con systemd.time , la configuración

OnCalendar=*:0/15

se traduce exactamente a

OnCalendar=*:0,15,30,45

es decir. activa la unidad exactamente a la hora completa, así como a las doce y cuarto y las cuatro menos cuarto.

Dependiendo de su servicio, esto puede no ser lo que desea, ni lo que necesita en todos los casos.

Un temporizador que se ejecuta cada 15 minutos , por ejemplo a las 1:02, 1:17, 1:32, 1:47, 2:02, ... siempre dependiendo de la última vez que se ejecutó, se puede lograr con el systemd. ajuste del temporizador

OnUnitActiveSec=15min

Ahora, también querrá que la unidad se inicie un tiempo después del arranque (a menos que desee activar la unidad manualmente o tener una dependencia que lo haga), por lo que tal vez debería especificar

OnBootSec=10min
OnUnitActiveSec=15min

para que la unidad se inicie 10 minutos después del arranque y luego cada 15 minutos después de esa primera vez.

Además, existe la configuración OnUnitInactiveSecque comienza a contar el tiempo después de que el servicio se ha detenido (o, más generalmente, la unidad se ha desactivado).

Debilski
fuente
1
Advertencia: OnUnitActiveSec parece estar bastante roto .
Anders Kaseorg