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?


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:


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).


1
Advertencia: OnUnitActiveSec parece estar bastante roto .
Anders Kaseorg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.