Ho provato a impostare un processo cron cron per eseguire uno script Bash come root, per eseguire al minuto 7,37, ogni ora, ogni giorno del mese, ogni mese. Questo script si trova /usr/bin
e denominato tunlrupdate.sh
. Aggiorna il DNS di Tunlr.
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Questo script Bash è disponibile qui .
Quando viene invocato, lo script scrive ciò che sta accadendo in un registro in cui si trova /var/log/tunlr.log
Per aggiungere questo lavoro cron cron ho usato lo standard per il crontab di root
sudo crontab -e
E ho inserito queste 2 righe alla fine. Mi aspetto che cron esegua lo script come root.
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
Un comando successivo ha sudo crontab -l
confermato che il processo cron è stato inserito.
Ho riavviato Ubuntu e stavo controllando nel file di registro se il processo cron era stato avviato correttamente. Tuttavia, non esiste nulla nel file di registro che /var/log/tunlr.log
significa che il lavoro non è mai stato avviato correttamente.
L'ho verificato se avessi eseguito lo script dalla riga di comando
sudo /usr/bin/tunlrupdate.sh
quindi il file di registro viene aggiornato di conseguenza.
Perché questo cron job non funziona come previsto nel mio sistema?
AGGIORNAMENTO 1: Tutte le soluzioni proposte finora non funzionano. Ringrazio Olli per una CLI per elencare il registro di sistema sudo grep CRON /var/log/syslog
. Tuttavia ho ricevuto un errore CRON
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
con il PATH suggerito = inserimento e uso del percorso assoluto dalla radice per funzioni nello script o senza queste soluzioni suggerite qui. Ricevo ancora questo errore.
Dopo alcune ricerche ho individuato l'errore nel file /usr/lib/php5/maxlifetime
come spiegato qui :Change #!/bin/sh -e --> #!/bin/sh -x
Quindi elencando il registro errori CRON nel mio sistema
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
Non riesco ancora a eseguire l'esecuzione dello script bash. Questa volta non viene visualizzato alcun errore nel registro. Per avere la certezza che questo non era il contenuto dello script, ho ridotto lo script alle seguenti 3 righe:
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
Non riesco ancora a completare il lavoro cron. Nulla è scritto nel file di registro. Quindi anche uno script vuoto non può essere eseguito in cron? Non capisco Conosco una sceneggiatura ridotta a queste 2 righe:
#!/bin/bash
exit 0
E ancora lo stesso registro degli errori. Lo script cron non passa attraverso ...