Portál AbcLinuxu, 2. listopadu 2025 21:47
Navíc se dokumentace nezmiňuje, jak crond pozná, že byl opravdu spuštěn v rámci inicializačních skriptů po startu systému a ne ručně později. To mi připadá dost důležité.
Navíc se dokumentace nezmiňuje, jak crond pozná, že byl opravdu spuštěn v rámci inicializačních skriptů po startu systému a ne ručně později. To mi připadá dost důležité.
Na implementaciu som sa nepozeral, ale nepise si to crond niekde do /var/... ?
Vždy při spuštění cronu se spustí fce run_reboot_jobs(db), a v té stojí:
run_reboot_jobs(db)
cron_db *db;
{
register user *u;
register entry *e;
int rbfd;
#ifdef DEBIAN
#define REBOOT_FILE "/var/run/crond.reboot"
/* Run on actual reboot, rather than cron restart */
if (access(REBOOT_FILE, F_OK) == 0) {
/* File exists, return */
log_it("CRON", getpid(),"INFO",
"Skipping @reboot jobs -- not system startup");
return;
}
/* Create the file */
if ((rbfd = creat(REBOOT_FILE, S_IRUSR&S_IWUSR)) < 0) {
/* Bad news, bail out */
log_it("CRON",getpid(),"DEATH","Can't create reboot check file")
;
exit(0);
} else {
close(rbfd);
log_it("CRON", getpid(),"INFO", "Running @reboot jobs");
}
Debug(DMISC, ("[%d], Debian running reboot jobs\n",getpid()));
#endif
Debug(DMISC, ("[%d], vixie running reboot jobs\n", getpid()));
for (u = db->head; u != NULL; u = u->next) {
for (e = u->crontab; e != NULL; e = e->next) {
if (e->flags & WHEN_REBOOT) {
job_add(e, u);
}
}
}
(void) job_runqueue();
}
Z toho mi vychází, že pokud cron není v Debianu, tak spustí reboot jobs vždycky a pokud je, tak si to hlídá vytvořením souboru /var/run/crond.reboot, který mu zřejmě debianí rc.init někde smaže. Tato modicikace je součástí debianího diffu. Taky je možné, že si to na jiných systémech hlídá jinak podobně.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.