GNU/Linux >> Linux Esercitazione >  >> Linux

@reboot di Crontab funziona solo per il root?

man 5 crontab è abbastanza chiaro come usare crontab per eseguire uno script all'avvio:

   These special time specification "nicknames" are supported, which replace the 5 initial time and date
   fields, and are prefixed by the `@` character:
   @reboot    :    Run once after reboot.

Quindi ho felicemente aggiunto una singola riga al mio crontab (sotto il mio account utente, non root):

@reboot     /home/me/myscript.sh

Ma per qualche motivo, myscript.sh non verrebbe eseguito al riavvio della macchina.
(funziona correttamente se lo invoco dalla riga di comando, quindi non è un problema di autorizzazioni)

Cosa mi sto perdendo?

Aggiorna per rispondere alle domande di @Anthon:

  1. Versione Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
  2. Versione Cron:vixie-cron-4.1-81.el5.x86_64
  3. Sì, /home è una partizione montata. Sembra che questo sia il problema. Come posso risolvere questo problema?
  4. Attualmente, myscript.sh fa eco solo a un messaggio di testo in un file in /home/me .

Risposta accettata:

Questo può essere un argomento un po' confuso perché ci sono diverse implementazioni di cron. Inoltre c'erano diversi bug che interrompevano questa funzione e ci sono anche alcuni casi d'uso in cui semplicemente non funzionerà, in particolare se esegui uno spegnimento/avvio rispetto a un riavvio.

Bug

punto dati n. 1

Uno di questi bug in Debian è trattato qui, intitolato:cron:@reboot i lavori non vengono eseguiti. Questo sembra essere arrivato 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 di SO intitolata:@reboot cronjob non in esecuzione.

estratto

commento n. 1:…. 3) la tua versione di crond potrebbe non supportare @reboot stai usando crond di vix? ... mostra i risultati dell'utente crontab -l -u

commento n. 2:... Potrebbe essere una buona idea configurarlo come script di inizializzazione invece di fare affidamento su una versione specifica di @reboot di cron.

commento n. 3:… @MarkRoberts ha rimosso il riavvio e modificato 1 * * * * , in */1 * * * * , il problema è risolto! Dove mando il rappresentante pt Mark? Grazie!

La risposta accettata in quella domanda e risposta conteneva anche questo commento:

Mi sembra che Lubuntu non supporti la sintassi @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. Si intitola:Discussione:Cron – @reboot jobs not working.

estratto

Re:Cron – @reboot job non funziona

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 crea un file di registro.

Syslog mostra che CRON ha eseguito il lavoro... ma, ancora una volta, nessun output e il processo non è in esecuzione.
Jul 15 20:07:45 RavenWing cron[1026]:(CRON) INFO (Esecuzione di @reboot jobs)
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?

Ok... Parzialmente risolto. Contrassegnerò questo come risolto e aprirò un nuovo thread con il nuovo problema…..

Penso che la risposta fosse che la mia home directory crittografata non era stata montata quando CRON stava tentando di eseguire lo script (memorizzato in /home/nomeutente/script). Spostato in /usr/scripts e il lavoro viene eseguito come previsto.

Quindi ora sembra essere un problema di Spideroak. Il processo si avvia, ma quando il processo di avvio è terminato, non c'è più. Immagino un incidente per qualche motivo... Nuovo thread per chiedere informazioni a riguardo.

Grazie per tutto l'aiuto!

Una volta che questo utente di cui sopra ha capito il suo problema, è stato in grado di ottenere @reboot elaborazione della voce crontab di un utente.

Correlati:perché non è possibile trovare read /run/user/1000/gvfs anche se è in esecuzione come root?

Non sono del tutto sicuro di quale versione di cron sia usata su Ubuntu, ma questo sembrerebbe indicare che gli utenti possono usare @reboot o che il bug è stato corretto a un certo punto nelle versioni successive di cron.

punto dati n. 4

Ho testato su CentOS 6 quanto segue 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

Da portare via

  1. Questa funzione sembra essere supportata sia per le voci di sistema che per quelle utente crontab.
  2. Devi assicurarti che sia supportato/funzionante nella tua particolare distribuzione e/o versione del pacchetto cron.

Per ulteriori informazioni su come funziona il meccanismo effettivo per @reboot Mi sono imbattuto in questo post sul blog che discute le viscere. Si intitola:@reboot – spiega la semplice magia di cron.

Debug di crond

Puoi 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 livello di registrazione predefinito, rimuovi semplicemente il "-L 2" quando hai finito di eseguire il debug della situazione.


Linux
  1. CentOS / RHEL:come disabilitare ssh per utenti non root (consentendo ssh solo per utente root)

  2. PYTHONPATH non funziona per sudo su GNU/Linux (funziona per root)

  3. Dov'è .bashrc per root?

  4. la password di root non funziona per su nel terminale

  5. Abilita la password semplice per l'utente root su CentOS

Come visualizzare o elencare i lavori Cron in Linux

Spazio riservato per il root su un filesystem:perché?

Diff -r Solo per determinati tipi di file?

È possibile che root esegua un comando come non root?

Solo l'utente root può aprire LibreOffice

determinare ulimit per l'utente root