Dlaczego apt-get zawodzi, gdy jest zautomatyzowany z cronem?


15

Próbuję użyć crona do automatyzacji aktualizacji systemu. Poniżej możesz zobaczyć mój plik crontab, polecenia i wynikające z nich błędy.

Kiedy uruchamiam upgrade.sh jako root, skrypt działa poprawnie. Kiedy cron go apt-get -y updateuruchomi, nie będzie działać, ale aptitude -y safe-upgradezawiedzie. Zgaduję ten błąd: debconf: (This frontend requires a controlling tty.)ponieważ istnieje aktualizacja jądra, która z kolei aktualizuje gruba, co wymaga ode mnie wyraźnego stwierdzenia, że ​​nadpisanie jest w porządku /boot/grub/menu.lst. Ale nie rozumiem błędów ścieżki. I chciałbym, aby aktualizacje, które nie wymagają mojego nadzoru, zostały przeprowadzone.

Przeczytałem to pytanie i jest to na razie nieakceptowane rozwiązanieunattended-upgrades , i mogę z niego skorzystać, ale dlaczego nie mogę użyć crona? Wygląda na to, że powinno być naprawdę proste i bardziej linuksowe.

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

Błędy

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

Odpowiedzi:


10

Komunikaty informują, że PATHzmienna środowiskowa jest niepoprawna.

Spróbuj dodać

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

na szczyt twojego crontab.

Lub możesz umieścić tę samą PATHlinię co druga linia ~/bin/upgrades.sh. W ten sposób twój test z linii poleceń i twój test crontabpowinny dać te same wyniki.


Widzę. Umieściłem polecenie w skrypcie, błędnie sądząc, że linia #! / Bin / bash załaduje normalną ścieżkę roota. Oczywiście się myliłem. Co więc determinuje domyślną ścieżkę użytkownika i jak jest stosowana?
djeikyb

Dlaczego cron nie wchodzi na ścieżkę użytkownika? Czy lepiej jest dodać ścieżkę do crontab lub mojego skryptu? Czy są wady?
djeikyb

Ma to być ze względów bezpieczeństwa, ale zgadzam się, to denerwujące. 1) Jeśli umieścisz go w skrypcie, możesz umieścić PATH=...plik, np. ~/.envI pobrać go z każdego skryptu, który piszesz, używając . ~/.envgórnej części skryptu. Następnie, jeśli zmienisz PATH, musisz edytować tylko jeden plik. 2) Jeśli go włożysz crontab, oznacza to, że nie musisz edytować wszystkich skryptów crona, ale będziesz mieć dwa miejsca do edycji, jeśli chcesz zmienić swoje PATH(np. ~/.bashrcI crontab). Co jest lepsze, zależy od ciebie.
Mikel

Chłodny. Wydaje mi się, że moje pytanie brzmi: dlaczego jest niepewne? Teraz googluję, ale jeszcze niczego nie wymyśliłem. W każdym razie dokonałem zmian i zaznaczę jako odpowiedź jutro rano, gdy się uruchomi, na wypadek, gdyby coś innego poszło nie tak.
djeikyb

Chciałbym też wiedzieć. Jeśli istnieje powód, ani dokumentacja, ani cronkod źródłowy nie mówią, co to jest. Teoretycznie można było wymusić spójne środowisko, aby można było skopiować crontab od jednego użytkownika do drugiego, ale tylko PATHsię zmienia, więc to nie może być powód.
Mikel

14

Chociaż główny problem został już rozwiązany, wygląda na to, że otrzymujesz ostrzeżenia debconf, ponieważ uruchamiasz apt-get bez interaktywnego tty. Aby pozbyć się tych komunikatów, możesz ustawić tę zmienną środowiskową:

DEBIAN_FRONTEND=noninteractive


0

Z CronHowto :

W zależności od uruchamianych poleceń może być konieczne rozwinięcie zmiennej PATH użytkownika root, umieszczając następujący wiersz u góry pliku crontab:

ŚCIEŻKA = / usr / sbin: / usr / bin: / sbin: / bin

Ale tak naprawdę wszystko wydaje się w porządku, robiąc to samo co ty ... Skąd wziąłeś te błędy?

CRONTAB:

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

SCENARIUSZ:

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.

Moje błędy pochodzą z wysłanego do mnie dziennika zadania cron. Używam 10.04, tak samo jak ty. Dziwne ..
djeikyb 29.01.11

Musi być jakiś plik konfiguracyjny crona, który określa restrykcyjną ŚCIEŻKĘ ... W tej chwili nie mam problemów.
luri
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.