Warum versagt apt-get, wenn es mit cron automatisiert wird?

15

Ich versuche, meine Systemaktualisierungen mit cron zu automatisieren. Sie können meine crontab, Befehle und daraus resultierende Fehler unten sehen.

Wenn ich upgrades.sh als root ausführe, läuft das Skript einwandfrei. Wenn cron es ausführt, läuft es apt-get -y updatekein Problem, aber es aptitude -y safe-upgradeschlägt fehl. Ich vermute diesen Fehler: debconf: (This frontend requires a controlling tty.)liegt daran, dass es ein Kernel-Update gibt, das wiederum grub aktualisiert, was erfordert, dass ich ausdrücklich sage, dass es in Ordnung ist, es zu überschreiben /boot/grub/menu.lst. Aber ich verstehe die Pfadfehler nicht. Und ich möchte die Updates, für die meine Aufsicht nicht erforderlich ist.

Ich habe diese Frage durchgelesen und es ist eine noch nicht akzeptierte Lösung vonunattended-upgrades und ich werde sie möglicherweise verwenden, aber warum kann ich cron nicht verwenden? Scheint, als sollte es wirklich einfach und mehr Linux sein.

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

Fehler

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...
djeikyb
quelle

Antworten:

10

In den Nachrichten wird Ihnen mitgeteilt, dass Ihre PATHUmgebungsvariable falsch ist.

Versuchen Sie das Hinzufügen

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

an die Spitze Ihres crontab.

Oder Sie könnten die gleiche PATHZeile wie die zweite Zeile von setzen ~/bin/upgrades.sh. Auf diese Weise sollten Ihr Test über die Befehlszeile und Ihr Test über die Befehlszeile crontabdieselben Ergebnisse erzielen.

Mikel
quelle
Aha. Ich habe den Befehl in ein Skript geschrieben und fälschlicherweise geglaubt, die Zeile #! / Bin / bash würde den normalen Pfad von root laden. Offensichtlich habe ich mich geirrt. Was bestimmt also den Standardpfad eines Benutzers und wie wird er angewendet?
DJEIKYB
Warum nimmt cron den Weg des Benutzers nicht an? Ist es besser, crontab oder meinem Skript einen Pfad hinzuzufügen? Gibt es Nachteile?
DJEIKYB
Es soll aus Sicherheitsgründen sein, aber ich stimme zu, es ist ärgerlich. 1) Wenn Sie es in Ihr Skript einfügen, können Sie PATH=...z. B. eine Datei einfügen ~/.envund sie von jedem Skript, das Sie schreiben, über . ~/.envden oberen Rand des Skripts ausgeben. Wenn Sie dann Ihre ändern, müssen PATHSie nur eine Datei bearbeiten. 2) Wenn Sie es eingeben crontab, bedeutet dies, dass Sie nicht alle Ihre Cron-Skripte bearbeiten müssen, aber Sie müssen zwei Stellen bearbeiten, wenn Sie Ihre PATH(z . B. ~/.bashrcund crontab) ändern möchten . Was besser ist, liegt bei Ihnen.
Mikel
Cool. Ich denke meine Frage ist, warum es unsicher ist? Ich google gerade, habe aber noch nichts gefunden. Wie auch immer, ich habe die Änderungen vorgenommen und ich werde sie morgen früh als beantwortet markieren, wenn sie ausgeführt werden, für den Fall, dass etwas anderes schief geht.
DJEIKYB
Ich wünschte, ich wüsste es auch. Wenn es einen Grund gibt, cronsagen weder die Dokumentation noch der Quellcode, was es ist. Theoretisch hätte es sein können, eine konsistente Umgebung zu erzwingen, so dass Sie eine Crontab von einem Benutzer auf einen anderen kopieren können, diese aber nur PATHgeändert wird, sodass dies nicht der Grund sein kann.
Mikel
14

Obwohl Ihr Hauptproblem bereits beantwortet wurde, werden anscheinend Debconf-Warnungen angezeigt, da Sie apt-get ohne ein interaktives tty ausführen. Um diese Meldungen zu entfernen, können Sie die folgende Umgebungsvariable festlegen:

DEBIAN_FRONTEND=noninteractive
TrinitronX
quelle
1

Es gibt eine Community-Wiki-Seite: Grund, warum crontab nicht funktioniert . In diesem Fall scheinen die begrenzten Umgebungsvariablen von cron die Ursache zu sein. Können Sie dies über ein Shell-Skript in /etc/cron.daily ausführen?

Gemeinschaft
quelle
Missverstanden deine Antwort, also nichts zu kommentieren.
luri
0

Von CronHowto :

Abhängig von den ausgeführten Befehlen müssen Sie möglicherweise die PATH-Variable des Root-Benutzers erweitern, indem Sie die folgende Zeile oben in die crontab-Datei einfügen:

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

Aber in der Tat scheint alles in Ordnung zu sein, so wie Sie es getan haben ... Wo haben Sie diese Fehler hergeholt?

CRONTAB:

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

SKRIPT:

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.
luri
quelle
Meine Fehler stammen aus dem an mich gesendeten Cron-Job-Protokoll. Ich laufe 10.04, genau wie du. Seltsam ..
djeikyb
Es muss sich um eine Cron-Konfigurationsdatei handeln, die einen restriktiven Pfad festlegt ... Ich habe derzeit keine Probleme.
Luri