¿Hay alguna forma de acceder al cron
? temporizadores y obtener los segundos restantes hasta la próxima ejecución de scripts en el crontab
o tal vez los segundos desde el último?
Respuesta aceptada:
No es fácil. crond espera una señal del kernel y se va a dormir. Cuando recibe la señal, comprueba si hay cronjobs para ejecutar en ese minuto, los inicia y vuelve a dormir.
Es un diseño muy eficiente:cron no usa ninguna CPU mientras está durmiendo. Tampoco tiene conciencia del paso del tiempo. A medida que se va a dormir, establece un "tiempo de espera" basado en el tiempo que transcurre antes de que se deba ejecutar el siguiente comando de cualquier cronjob "registrado".
En 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)
Mientras rastrea el demonio cron, verá que se duerme con un tiempo de espera, como se muestra a continuación:
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
Cuando actualiza cualquier trabajo cron, el proceso de suspensión también se activa pero para actualizar su propia configuración, después de lo cual volverá a dormir con el nuevo valor de tiempo de espera.
Es posible ver el tiempo de espera establecido. Tenga en cuenta que cron llamó a time syscall justo antes de que se fuera a dormir (lo que devuelve los segundos desde el epoc), por lo que si ha observado esto (es decir, rastreó el proceso cuando llamó a time() syscall, podrá restar ese tiempo desde el actual y compárelo con el tiempo de espera establecido en la llamada pollsys.
Entonces… como dije, no es fácil.