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 update
kein Problem, aber es aptitude -y safe-upgrade
schlä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...
PATH=...
z. B. eine Datei einfügen~/.env
und sie von jedem Skript, das Sie schreiben, über. ~/.env
den oberen Rand des Skripts ausgeben. Wenn Sie dann Ihre ändern, müssenPATH
Sie nur eine Datei bearbeiten. 2) Wenn Sie es eingebencrontab
, bedeutet dies, dass Sie nicht alle Ihre Cron-Skripte bearbeiten müssen, aber Sie müssen zwei Stellen bearbeiten, wenn Sie IhrePATH
(z . B.~/.bashrc
undcrontab
) ändern möchten . Was besser ist, liegt bei Ihnen.cron
sagen 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 nurPATH
geändert wird, sodass dies nicht der Grund sein kann.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:
quelle
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?
quelle
Von CronHowto :
Aber in der Tat scheint alles in Ordnung zu sein, so wie Sie es getan haben ... Wo haben Sie diese Fehler hergeholt?
CRONTAB:
SKRIPT:
LOG:
quelle