systemd: unidades de temporizador que imitan el comportamiento de anacron

13

Necesito escribir una unidad de temporizador para una máquina que se apaga con frecuencia (por ejemplo, la configuración de escritorio clásica). Esta unidad de temporizador debe activarse regularmente pero no con mucha frecuencia (por ejemplo, semanalmente, mensualmente).

Encontré algunos enfoques, pero no todos encajan realmente:

  • De acuerdo con las páginas del manual sólo el OnBootSecy las OnStartupSecdirectivas se activará si el punto de tiempo configurado está en el pasado. También encontré algunos ejemplos usando una combinación de estos OnActiveSecpara definir un evento regular. El problema es: cada vez que se inicia la máquina, el temporizador activará la unidad configurada. Si tiene un temporizador que debe ejecutarse UNA VEZ por semana / mes, es demasiado frecuente. Por ejemplo: no quiero hacer rotar mis registros tres veces al día ...

  • Soluciones con la OnCalendardirectiva. Si la máquina se apaga en el punto configurado en el tiempo (principalmente medianoche porque si omite la hora en la especificación de tiempo, el valor predeterminado es 00:00:00) el temporizador no se activará después del próximo arranque. Al menos así es como lo obtuve. Está bien ?

Entonces, aquí viene la pregunta:
¿el temporizador con eventos de calendario se activa inmediatamente después del próximo inicio si la hora configurada es pasada?
Si no es así: ¿hay una solución alternativa para obtener ese comportamiento?

mmh
fuente
Ok, estoy al tanto de esto . ¿Sigue siendo el camino a seguir? ¿O hay soluciones más elegantes? ¿Hay algo planeado para mejorar la situación actual?
mmh

Respuestas:

15

Esta característica ya se implementó en systemd (ver> = 212) usando la Persistent=directiva, por lo que solo necesita insertarla Persistent=trueen el archivo de la unidad mientras usa la OnCalendar=directiva para establecer la fecha / hora para ejecutar el trabajo.

Persistente =

Toma un argumento booleano. Si es verdadero, la hora en que la unidad de servicio se activó por última vez se almacena en el disco. Cuando se activa el temporizador, la unidad de servicio se activa inmediatamente si se hubiera activado al menos una vez durante el tiempo en que el temporizador estaba inactivo. Esto es útil para ponerse al día con las ejecuciones perdidas del servicio cuando la máquina estaba apagada. Tenga en cuenta que esta configuración solo tiene efecto en los temporizadores configurados con OnCalendar =.

Pedro
fuente
¿No es lo contrario? OP pregunta sobre la eliminación de ejecuciones adicionales como resultado de tener ambos OnBootSecy OnActiveSec. Persistentes ejecutar una vez en el arranque si se perdió al menos una carrera debido a que no funciona?
x-yuri
Bueno, probablemente lo dijiste de esta manera .
x-yuri
0

De acuerdo con este correo electrónico en la lista de correo systemd-devel, el comportamiento deseado está en la hoja de ruta y se agregará en el futuro.

mmh
fuente