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 update
uruchomi, nie będzie działać, ale aptitude -y safe-upgrade
zawiedzie. 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...
PATH=...
plik, np.~/.env
I pobrać go z każdego skryptu, który piszesz, używając. ~/.env
górnej części skryptu. Następnie, jeśli zmieniszPATH
, musisz edytować tylko jeden plik. 2) Jeśli go włożyszcrontab
, oznacza to, że nie musisz edytować wszystkich skryptów crona, ale będziesz mieć dwa miejsca do edycji, jeśli chcesz zmienić swojePATH
(np.~/.bashrc
Icrontab
). Co jest lepsze, zależy od ciebie.cron
kod ź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 tylkoPATH
się zmienia, więc to nie może być powód.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ą:
źródło
Istnieje strona wiki społeczności: Powód, dla którego crontab nie działa . W tym przypadku wydaje się, że przyczyną są ograniczone zmienne środowiskowe crona. Czy możesz to uruchomić ze skryptu powłoki w /etc/cron.daily?
źródło
Z CronHowto :
Ale tak naprawdę wszystko wydaje się w porządku, robiąc to samo co ty ... Skąd wziąłeś te błędy?
CRONTAB:
SCENARIUSZ:
LOG:
źródło