Questo può essere un po 'un argomento confuso perché ci sono diverse implementazioni di cron. Inoltre ci sono stati diversi bug che hanno interrotto questa funzione e ci sono anche alcuni casi d'uso in cui semplicemente non funziona, in particolare se si esegue un arresto / avvio rispetto a un riavvio.
bugs
punto dati n. 1
Uno di questi bug in Debian è trattato qui, intitolato: cron: i lavori @reboot non vengono eseguiti . Questo sembra essersi fatto strada anche in Ubuntu, cosa che non posso confermare direttamente.
punto dati n. 2
La prova del bug in Ubuntu sembrerebbe essere confermata qui in questa domanda e risposta dal titolo: @reboot cronjob non in esecuzione .
estratto
commento # 1: .... 3) la tua versione di crond potrebbe non supportare @reboot stai usando il crond di vix? ... mostra i risultati dell'utente crontab -l -u
commento n. 2: ... Potrebbe essere una buona idea configurarlo come script di init invece di fare affidamento su una versione specifica di @reboot di cron.
commento # 3: ... @MarkRoberts ha rimosso il riavvio e modificato 1 * * * *, in * / 1 * * * *, il problema è stato risolto! Dove devo inviare il rappresentante Mark? Grazie!
La risposta accettata in tale domanda e risposta aveva anche questo commento:
Mi sembra che Lubuntu non supporti la sintassi di @Reboot Cron.
Ulteriori prove
punto dati n. 3
Come ulteriore prova c'era questo thread che qualcuno stava tentando la stessa cosa e si sentiva frustrato dal fatto che non funzionasse. È intitolato: Discussione: Cron - I lavori @reboot non funzionano .
estratto
Ri: Cron - I lavori @reboot non funzionano
Quote Originariamente inviata da ceallred Visualizza messaggio Questo mi sta uccidendo ... Ho provato lo script wrapper. L'esecuzione manuale genera il file di registro ... il riavvio e il lavoro non viene eseguito o non crea il file di registro.
Syslog mostra che CRON ha eseguito il lavoro ... ma ancora una volta, nessun output e il processo non è in esecuzione. 15 luglio 20:07:45 RavenWing cron [1026]: (CRON) INFO (Esecuzione di lavori @reboot) 15 luglio 20:07:45 RavenWing CRON [1053]: (ceallred) CMD (/ home / ceallred / Scripts / run_spideroak. sh> /home/ceallred/Scripts/SpiderOak.log 2> & 1 &)
Sembra che a cron non piaccia il comando @reboot .... Altre idee?
Va bene ... Parzialmente risolto. Lo segnerò come risolto e inizierò un nuovo thread con il nuovo problema .....
Penso che la risposta sia stata la mia home directory crittografata non montata quando CRON stava cercando di eseguire lo script (archiviato in / home / nome utente / script). Spostato in / usr / script e il lavoro viene eseguito come previsto.
Quindi ora sembra essere un problema spideroak. Il processo ha inizio, ma al termine del processo di avvio è terminato. Sto indovinando un arresto per qualche motivo ... Nuovo thread per chiedere a tale proposito.
Grazie per tutto l'aiuto!
Una volta che questo utente sopra ha scoperto il suo problema, è stato in grado di @reboot
risolvere la voce crontab di un utente.
Non sono del tutto sicuro di quale versione di cron sia usata su Ubuntu, ma questo sembrerebbe indicare che anche l'utente può usare @reboot
, o che il bug è stato corretto ad un certo punto nelle versioni successive di cron.
punto dati n. 4
Ho testato su CentOS 6 il seguente e ha funzionato.
Esempio
$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1
Ho quindi riavviato il sistema.
$ sudo reboot
Dopo il riavvio.
$ cat reboot.txt
hi
Take away
- Questa funzione sembra essere supportata sia per le voci crontab di sistema che per quelle dell'utente.
- Devi assicurarti che sia supportato / funzionante nella tua particolare distribuzione e / o versione del pacchetto cron.
Per ulteriori informazioni su come funziona il meccanismo reale, @reboot
mi sono imbattuto in questo post sul blog che discute le viscere. Si intitola: @reboot - spiega la semplice magia cron .
Debug crond
È possibile aumentare la verbosità di crond
aggiungendo quanto segue a questo file di configurazione su distribuzioni basate su RHEL / CentOS / Fedora.
$ more crond
# Settings for the CRON daemon.
# CRONDARGS= : any extra command-line startup arguments for crond
CRONDARGS="-L 2"
I livelli validi sono 0, 1 o 2. Per ripristinare questo file al suo livello di registrazione predefinito, rimuovere semplicemente "-L 2"
quando hai terminato il debug della situazione.