C'è un modo per accedere a cron
timer e ottenere i secondi rimanenti fino alla successiva esecuzione di script nel crontab
o forse i secondi dall'ultimo?
Risposta accettata:
Non facilmente. crond attende un segnale dal kernel e va a dormire. Quando riceve il segnale, controlla se ci sono cronjob da eseguire in quel minuto, li avvia e torna a dormire.
È un design molto efficiente:cron non utilizza alcuna CPU mentre è inattivo. Non ha nemmeno la consapevolezza del tempo che passa. Quando va a dormire, imposta un "timeout" basato su quanto tempo è necessario prima che il comando successivo da qualsiasi cronjob "registrato" debba essere eseguito.
Su 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)
Durante la traccia del demone cron, vedrai che va a dormire con un timeout, come di seguito:
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
Quando aggiorni qualsiasi processo cron, anche il processo di sospensione viene riattivato, ma per aggiornare la propria configurazione, dopodiché tornerà a dormire con il nuovo valore di timeout.
È possibile visualizzare il timeout impostato. Nota che cron ha chiamato il time syscall appena prima di quando è andato a dormire (che restituisce i secondi da epoc), quindi se hai osservato questo (cioè hai tracciato il processo quando ha chiamato time() syscall, sarai in grado di sottrarre quell'ora dalla corrente e confrontarla con il timeout impostato sulla chiamata pollsys.
Quindi... come ho detto, non facilmente.