sviluppo-web-qa.it

Pianificazione dei lavori tramite crontab, cosa accadrà quando il computer viene spento durante quel periodo?

Pianifico alcune attività usando crontab.

Cosa succederà se il mio computer viene spento o spento durante il periodo in cui cron era programmato per fare qualcosa?

Ogni cron job mancante viene eseguito dopo l'accensione del computer o i processi persi per quel giorno vengono ignorati? Se i lavori persi non riprendono, c'è un modo per configurare cron in modo che esegua le attività perse dopo aver riacceso il computer?

92
seg.server.fault

Quando il computer viene spento (o altrimenti il ​​demone cron non è in esecuzione), i lavori cron non verranno avviati.

Se si dispone di lavori che si desidera eseguire dopo il fatto in quei momenti in cui il computer è spento, utilizzare anacron. Installato di default, vedi "man anacron", "man anacrontab" o il file/etc/anacrontab per maggiori informazioni.

Ubuntu utilizza anacron per impostazione predefinita per le voci crontab in:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

lasciando che i crontab rimanenti vengano gestiti dal demone cron principale, in particolare:

/etc/crontab
/etc/cron.d
/var/spool/cron

APPUNTI

Anacron stesso non viene eseguito come demone, ma si basa su script di avvio del sistema e cron stesso per l'esecuzione.

Nella casella Ubuntu 8.04 che sto guardando, /etc/init.d/anacron viene eseguito all'avvio, e di nuovo da cron ogni mattina alle 07:30.

Il README in /usr/share/doc/anacron/README.gz ha un po 'più di informazioni rispetto a quelle contenute nelle manpage.

ESEMPI

Per semplici lavori "giornalieri", "settimanali", "mensili", inserisci una copia o un link simbolico allo script in una delle directory /etc/cron.{daily|weekly|monthly} sopra. Anacron si occuperà di eseguirlo quotidianamente/settimanalmente/mensilmente e se il tuo computer è spento il giorno in cui gli script "settimanali" verrebbero normalmente eseguiti, li eseguirà alla successiva accensione del computer.

Come altro esempio, supponendo che tu abbia uno script qui: /usr/local/sbin/maint.sh

E desideri eseguirlo ogni tre giorni, la voce standard in/etc/crontab sarebbe simile a questa:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Se il computer non era acceso alle 00:00 il 3 del mese, il lavoro non verrebbe eseguito fino al 6.

Per fare in modo che il lavoro venga eseguito il 4 ° quando il computer è spento e "manca" l'esecuzione il 3 °, si dovrebbe usare questo in/etc/anacrontab (non dimenticare di rimuovere la linea da/etc/crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

Il "ritardo" di "5" sopra indica che Anacron attenderà 5 minuti prima di eseguire questo lavoro. L'idea è di impedire all'anacron di sparare immediatamente al momento dell'avvio.

76
jeff

Questo dipende da quale cron scheduler usi. Il daemon cron di base di Vanilla non eseguirà attività perse a causa di tempi di inattività del sistema. Tuttavia, ci sono altri programmatori cron appositamente progettati per questa situazione che lo faranno per te. I due esempi più comuni sono anacron e fcron .

17
Tyler McHenry

Le attività pianificate mentre il computer è spento non verranno eseguite quando il computer si riaccende

6
Alan H

Se si arresta mentre i processi cron sono in esecuzione, il sistema si arresta e i processi cron si arrestano (o non vengono eseguiti).

Un'alternativa che puoi verificare è anacron.

3
KPWINC

Dipende davvero dal cron deamon che stai eseguendo. Vixie-cron salterà semplicemente i cronjob persi. fcron eseguirà i cron perduti il ​​prima possibile. IIRC si basa anche su vixie-cron, quindi se è quello che stai cercando potresti voler dare un'occhiata a fcron.

3
gregf