Existuje nějaký způsob, jak získat přístup k cron
časovače a získáte zbývající sekundy do dalšího spuštění skriptů v crontab
nebo možná sekundy od posledního?
Přijatá odpověď:
Ne snadno. crond čeká na signál z jádra a jde spát. Když dostane signál, zkontroluje, zda je v dané minutě potřeba provést nějaké cronjoby, spustí je a přejde zpět do režimu spánku.
Jedná se o velmi efektivní design – cron nepoužívá žádný CPU, když spí. Nemá ani povědomí o plynutí času. Když přejde do režimu spánku, nastaví „časový limit“ podle toho, jak dlouho zbývá, než se musí spustit další příkaz z jakéhokoli „registrovaného“ cronjob.
Na 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)
Při sledování démona cron uvidíte, že přejde do režimu spánku s časovým limitem, jak je uvedeno níže:
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
Když aktualizujete jakoukoli úlohu cronu, spící proces se také probudí, ale aktualizuje svou vlastní konfiguraci, po které se vrátí do režimu spánku s novou hodnotou časového limitu.
Je možné vidět nastavený časový limit. Všimněte si, že cron volal time syscall těsně předtím, než přešel do režimu spánku (což vrací sekundy od epoc), takže pokud jste to pozorovali (tj. sledovali proces, když volal time() syscall, budete moci odečíst tento čas od aktuálního a porovnejte jej s časovým limitem nastaveným na volání pollsys.
Takže… jak jsem řekl, není to snadné.