Perché apt-get fallisce quando automatizzato con cron?


15

Sto cercando di utilizzare cron per automatizzare gli aggiornamenti del mio sistema. Puoi vedere il mio crontab, i comandi e gli errori risultanti di seguito.

Quando eseguo upgrades.sh come root, lo script funziona bene. Quando cron lo esegue, apt-get -y updatenon esegue alcun problema, ma aptitude -y safe-upgradefallisce. Sto indovinando questo errore: debconf: (This frontend requires a controlling tty.)è perché c'è un aggiornamento del kernel che a sua volta aggiorna grub, il che richiede che dico esplicitamente che va bene sovrascrivere /boot/grub/menu.lst. Ma non capisco gli errori del percorso. E vorrei che passassero gli aggiornamenti che non richiedono la mia supervisione.

Ho letto questa domanda ed è una soluzione non ancora accettata diunattended-upgrades , e potrei finire per usarla, ma perché non posso usare cron? Sembra che dovrebbe essere davvero semplice e più linux.

crontab

root@daedalus:~/bin# crontab -l
# m h  dom mon dow   command
45 06 * * * ~/bin/upgrades.sh

upgrades.sh

root@daedalus:~/bin# cat upgrades.sh 
#!/bin/bash
/usr/bin/apt-get -y update
/usr/bin/aptitude -y safe-upgrade

Errori

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:
Fetched 37.6MB in 4min 23s (143kB/s)
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
A package failed to install.  Trying to recover:
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
Reading package lists...
Building dependency tree...
Reading state information...
Reading extended state information...
Initializing package states...
Writing extended state information...

Risposte:


10

I messaggi indicano che la PATHvariabile di ambiente è errata.

Prova ad aggiungere

PATH=/usr/bin:/bin:/usr/sbin:/sbin

nella parte superiore del tuo crontab.

Oppure potresti mettere la stessa PATHriga della seconda riga di ~/bin/upgrades.sh. In questo modo il test dalla riga di comando e il test da crontabdovrebbero produrre gli stessi risultati.


Vedo. Ho inserito il comando in uno script erroneamente pensando che la riga #! / Bin / bash caricasse il normale percorso di root. Ovviamente mi sbagliavo. Quindi, cosa determina innanzitutto il percorso predefinito di un utente e come viene applicato?
djeikyb,

Perché cron non prende il percorso dell'utente? È meglio aggiungere il percorso a crontab o al mio script? Ci sono degli svantaggi?
djeikyb,

Dovrebbe essere per motivi di sicurezza, ma sono d'accordo, è fastidioso. 1) Se lo metti nel tuo script, potresti inserire PATH=...un file, ad esempio ~/.env, e ricavarlo da ogni script che scrivi . ~/.envnella parte superiore dello script. Quindi se cambi il tuo PATHdevi solo modificare un file. 2) Se lo metti dentro crontab, significa che non devi modificare tutti i tuoi script cron, ma avrai due posti da modificare se vuoi cambiare il tuo PATH(es. ~/.bashrcE crontab). Quale è meglio dipende da te.
Mikel,

Freddo. Immagino che la mia domanda sia: perché non è sicuro? Sto cercando su Google in questo momento, ma non ho ancora trovato nulla. Ad ogni modo, ho apportato le modifiche e contrassegnerò come risposta domani mattina quando funziona, nel caso in cui qualcos'altro vada in fumo.
djeikyb,

Vorrei saperlo anche io. Se c'è una ragione, né la documentazione né il croncodice sorgente dicono di cosa si tratta. In teoria avrebbe potuto essere quello di forzare un ambiente coerente in modo da poter copiare un crontab da un utente all'altro, ma PATHviene solo modificato, quindi non può essere il motivo.
Mikel,

14

Sebbene il problema principale sia già stato risolto, sembra che tu stia ricevendo avvisi di debconf perché stai eseguendo apt-get senza un tty interattivo. Per sbarazzarsi di questi messaggi, è possibile impostare questa variabile di ambiente:

DEBIAN_FRONTEND=noninteractive

1

Esiste una pagina wiki della comunità: motivo per cui crontab non funziona . In questo caso, sembra che la causa siano le variabili d'ambiente limitate di cron. Puoi eseguirlo da uno script di shell in /etc/cron.daily?


Ho frainteso la tua risposta, quindi niente da commentare.
Luri,

0

Da CronHowto :

A seconda dei comandi in esecuzione, potrebbe essere necessario espandere la variabile PATH degli utenti root posizionando la seguente riga nella parte superiore del file crontab:

PATH = / usr / sbin: / usr / bin: / sbin: / bin

Ma in effetti, sembra che tutto vada bene come te .... Da dove hai preso quegli errori?

CRONTAB:

root@PORTATIL:/var/log$ crontab -l
* * */2 * * /usr/share/myupdate.sh > /var/log/myupdate.log

SCRIPT:

root@PORTATIL:/etc# cat /usr/share/myupdate.sh 
#!/bin/bash
#Testing updates
apt-get update -y
apt-get upgrade -y

LOG:

root@PORTATIL:/etc# cat /var/log/myupdate.log 

Hit http://security.ubuntu.com lucid-security Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://packages.medibuntu.org lucid Release.gpg
Get:1 http://dl.google.com stable Release.gpg [197B]
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://security.ubuntu.com lucid-security Release
Hit http://badgerports.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net maverick Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Get:2 http://dl.google.com stable Release [1347B]
Hit http://security.ubuntu.com lucid-security/main Packages
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid Release
Hit http://download.virtualbox.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://linux.dropbox.com lucid Release.gpg
Get:3 http://dl.google.com stable/main Packages [1110B]
Hit http://security.ubuntu.com lucid-security/restricted Packages
Hit http://security.ubuntu.com lucid-security/main Sources
Hit http://security.ubuntu.com lucid-security/restricted Sources
Hit http://security.ubuntu.com lucid-security/universe Packages
Hit http://security.ubuntu.com lucid-security/universe Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net maverick Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://badgerports.org lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://security.ubuntu.com lucid-security/multiverse Packages
Hit http://security.ubuntu.com lucid-security/multiverse Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid/free Packages
Hit http://download.virtualbox.org lucid Release
Hit http://es.archive.ubuntu.com lucid Release.gpg
Hit http://linux.dropbox.com lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release.gpg
Hit http://badgerports.org lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net maverick/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://packages.medibuntu.org lucid/non-free Packages
Hit http://linux.dropbox.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid Release
Hit http://download.virtualbox.org lucid/contrib Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release
Hit http://es.archive.ubuntu.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid/restricted Packages
Hit http://es.archive.ubuntu.com lucid/main Sources
Hit http://es.archive.ubuntu.com lucid/restricted Sources
Hit http://es.archive.ubuntu.com lucid/universe Packages
Hit http://es.archive.ubuntu.com lucid/universe Sources
Hit http://es.archive.ubuntu.com lucid/multiverse Packages
Hit http://es.archive.ubuntu.com lucid/multiverse Sources
Hit http://es.archive.ubuntu.com lucid-updates/main Packages
Hit http://es.archive.ubuntu.com lucid-updates/restricted Packages
Hit http://es.archive.ubuntu.com lucid-updates/main Sources
Hit http://es.archive.ubuntu.com lucid-updates/restricted Sources
Hit http://es.archive.ubuntu.com lucid-updates/universe Packages
Hit http://es.archive.ubuntu.com lucid-updates/universe Sources
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Packages
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Sources
Fetched 2654B in 1s (1628B/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

I miei errori provengono dal registro lavori cron inviato per posta. Sto correndo il 10.04, come te. Strano ...
djeikyb,

Deve esserci un file di configurazione cron che imposta un PERCORSO restrittivo ... Non sto avendo problemi in questo momento.
Luri,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.