Existe-t-il un moyen d'accéder au cron
timers et obtenir les secondes restantes jusqu'à la prochaine exécution des scripts dans le crontab
ou peut-être les secondes depuis la dernière ?
Réponse acceptée :
Pas facilement. crond attend un signal du noyau et se met en veille. Lorsqu'il reçoit le signal, il vérifie s'il y a des cronjobs à exécuter dans cette minute, les lance et se rendort.
C'est une conception très efficace - cron n'utilise aucun processeur pendant qu'il dort. Il n'a pas non plus conscience du temps qui passe. Lorsqu'il se met en veille, il définit un "délai d'attente" basé sur le temps qu'il reste avant que la prochaine commande de n'importe quel cronjob "enregistré" ne doive s'exécuter.
Sur Solaris 10 :
sol10-primary:/> # pflags 271
271: /usr/sbin/cron
data model = _ILP32 flags = ORPHAN|MSACCT|MSFORK
/1: flags = ASLEEP pollsys(0x8047c70,0x1,0x8047ce8,0x806ba00)
Lors du traçage du démon cron, vous verrez qu'il se met en veille avec un délai d'attente, comme ci-dessous :
waitid(P_ALL, 0, 0x08047CD0, WEXITED|WTRAPPED|WNOHANG) Err#10 ECHILD
time() = 1361952435
pollsys(0x08047C70, 1, 0x08047CE8, 0x0806BA00) (sleeping...)
fd=3 ev=POLLRDNORM rev=0
timeout: 105.000000000 sec
sigmask = 0 0 0 0
Lorsque vous mettez à jour une tâche cron, le processus en veille est également réveillé, mais pour mettre à jour sa propre configuration, après quoi il se remettra en veille avec la nouvelle valeur de délai d'attente.
Il est possible de voir le délai d'attente qui a été défini. Notez que cron a appelé l'appel système time juste avant de s'endormir (ce qui renvoie les secondes depuis l'epoc), donc si vous l'avez observé (c'est-à-dire que vous avez suivi le processus lorsqu'il a appelé l'appel système time() , vous pourrez soustraire cette heure par rapport à l'heure actuelle et comparez-la au délai d'attente défini sur l'appel pollsys.
Donc… comme je l'ai dit, pas facilement.