systemd - Unités de minuterie qui imitent le comportement des anacrons

13

J'ai besoin d'écrire une unité de minuterie pour une machine qui est souvent éteinte (par exemple, configuration de bureau classique). Cette unité de minuterie doit être activée régulièrement mais pas très souvent (par exemple hebdomadaire, mensuelle).

J'ai trouvé quelques approches mais elles ne correspondent pas toutes vraiment:

  • Selon les pages de manuel seulement OnBootSecet les OnStartupSecdirectives seront activées si le point de temps configuré est dans le passé. J'ai également trouvé quelques exemples utilisant une combinaison de ceux-ci OnActiveSecpour définir un événement régulier. Le problème est le suivant: à chaque démarrage de la machine, la minuterie active l'unité configurée. Si vous avez une minuterie qui devrait fonctionner UNE FOIS par semaine / mois, c'est beaucoup trop souvent. Par exemple: je ne veux pas faire tourner mes journaux trois fois par jour ...

  • Solutions avec la OnCalendardirective. Si la machine est mise hors tension à l'heure configurée (principalement minuit car si vous omettez l'heure dans la spécification d'heure, elle est par défaut 00:00:00), la minuterie ne sera pas activée après le prochain démarrage. C'est du moins ainsi que je l'ai obtenu. Est-ce correct ?

Voici donc la question: le
minuteur avec les événements de calendrier est-il activé juste après le prochain démarrage si l'heure configurée est passée?
Sinon: existe-t-il une solution pour obtenir un tel comportement?

mmh
la source
Ok, je suis au courant de cela . Est-ce encore le chemin à parcourir? Ou existe-t-il des solutions plus élégantes? Y a-t-il quelque chose de prévu pour améliorer la situation actuelle?
mmh

Réponses:

15

Cette fonctionnalité a déjà été implémentée dans systemd (ver> = 212) à l'aide de la Persistent=directive, il vous suffit donc de l'insérer Persistent=truedans le fichier d'unité lors de l'utilisation de la OnCalendar=directive pour établir la date / heure d'exécution du travail.

Persistant =

Prend un argument booléen. Si vrai, l'heure à laquelle l'unité de service a été déclenchée pour la dernière fois est stockée sur le disque. Lorsque la minuterie est activée, l'unité de service est déclenchée immédiatement si elle aurait été déclenchée au moins une fois pendant le temps où la minuterie était inactive. Ceci est utile pour rattraper les exécutions manquées du service lorsque la machine était éteinte. Notez que ce paramètre n'a d'effet que sur les temporisateurs configurés avec OnCalendar =.

Pedro
la source
N'est-ce pas le contraire? OP demande d'éliminer les courses supplémentaires résultant des deux OnBootSecet OnActiveSec. Persistentest de courir une fois au démarrage si au moins une course a été manquée en raison d'une panne
x-yuri
Eh bien, vous le pensiez probablement de cette façon .
x-yuri
0

Selon cet e - mail sur la liste de diffusion systemd-devel, le comportement souhaité est sur la feuille de route et sera ajouté à l'avenir.

mmh
la source