Dokonaj aktualizacji apt-get i aktualizacji zautomatyzuj i bez nadzoru

28

Mam około 7 serwerów Debiana, którymi zarządzam, i chciałbym ustawić je tak, aby same się aktualizowały. Tak więc stworzyłem skrypt jako taki:

#!/bin/sh
apt-get update
apt-get upgrade

i umieściłem go na rootliście crontab. Niestety zawsze zawiesza się w sekcji Uaktualnienia, pytając, czy jestem pewien, że chcę dokonać uaktualnienia. Ponieważ jest to zadanie crona, nie widzę danych wyjściowych, dopóki nie wyśle ​​do mnie e-maila z informacją, że nie powiodło się. Czy istnieje sposób, aby pominąć ten monit i po prostu wykonać aktualizację automatycznie?

Kanadyjczyk Luke REINSTATE MONICA
źródło
3
... lub cron-apt.
derobert,

Odpowiedzi:

46

Użyj opcji -y, aby apt-get nie pytał. Od man apt-get:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Możesz także ustawić zmienną enbi DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
Arthur Ulfeldt
źródło
1
Co ma DEBIAN_FRONTENDzrobić? Czy jest również wykorzystywany do innych procesów?
Kanadyjczyk Luke REINSTATE MONICA,
Próbuję tego na moim serwerze domowym i wybiorę najlepszą odpowiedź, gdy tylko się uruchomi
kanadyjski Luke REINSTATE MONICA
1
@CanadianLuke zobaczyć tutaj dla DEBIAN_FRONTEND. Nie jest to wspomniane w moim Debianie man debconf, więc może to być kwestia Ubuntu.
terdon
@terdon nie masz pakietu -doc dla debconf. Jest w 7 części mężczyzny man 7 debconf;)
Braiam
@Braiam ah, OK, widziałem to i próbowałem, man 7 debconfale nic nie dostałem. Teraz wiem dlaczego :)
terdon
27

Cóż, może używasz niewłaściwego narzędzia. unattended-upgradespakiet instaluje aktualizacje bezpieczeństwa na codzień (można skonfigurować), możesz skonfigurować, które pakiety mają zostać zaktualizowane, czy nie, itp. Można zainstalować za pomocą:

sudo apt-get install unattended-upgrades

Od man unattended-upgrades:

Konfiguracja odbywa się za pomocą mechanizmu konfiguracji apt. Domyślny plik konfiguracyjny można znaleźć na stronie /etc/apt/apt.conf.d/50unattended-upgrades

Braiam
źródło
@CanadianLuke odczytuje wszystkie konfiguracje, /etc/apt/apt.conf.d/ale tylko te rozpoczynające Unattended-Upgrade::się od parsowania są analizowane.
Braiam
Próbuję tego na jednym z działających serwerów i wybiorę najlepszą odpowiedź, gdy tylko się uruchomi
Kanadyjczyk Luke REINSTATE MONICA
10

podczas gdy poprzednie odpowiedzi mają charakter informacyjny, nie omijają „problemu” wkładu wymaganego przez ludzkie środki podczas upgrade. dlatego używam następujących:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

w celu uwzględnienia aktualizacji „dystrybucji”, takich jak jądra, użyj dist-upgradepolecenia.

Szczegółowe informacje na temat tych parametrów znajdują się w podręczniku użytkownikadpkg .

Uwaga importat : wymagane jest wywołanie sudoz -Eparametrem:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

w przeciwnym razie EXPORToświadczenia nie będą miały wpływu na wywołania apt-get!

Podziękowania należą się Remy van Elst ! dzięki!

drganie
źródło
1
Czy możesz wyjaśnić, dlaczego dodałeś inne opcje do apt-get upgrade?
FarO
1
Ponadto, czy „sudo -E” jest wymagane, jeśli skrypt jest uruchamiany z crontab rott?
FarO
1
@FarO, który zależy od środowiska / kontekstu, w którym chcesz uruchomić cronjob. generalnie są one uruchamiane przez root- więc nie musisz sudow ogóle używać . w każdym przypadku „inne opcje” są ustawione na działanie bez nadzoru. zobacz odnośnik na manstronie.
roztrzęsiony
4

Ogólnym narzędziem do tego rodzaju rzeczy jest yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Na przykład możesz to zrobić

yes | sudo apt-get upgrade 

Należy pamiętać, że w konkretnym przypadku apt-get upgradekorzystania z opcji sugerowanych przez @Braiam lub @ArthurUlfeldt jest lepiej.

terdon
źródło
Wiersz, który wklejam, gdy chcę to zrobić ręcznie, to apt-get update && yes | apt-get upgrade(nasze serwery nie powinny używać sudo... Nie pytaj ...)
Kanadyjczyk Luke REINSTATE MONICA
Dlaczego warto korzystać ze sztuczki zamiast już podanej opcji? „-y” jest już w apt-get.
FarO,
3
Ponieważ, jak powiedziałem w odpowiedzi, jest to ogólne narzędzie do tego rodzaju operacji, więc ta odpowiedź dotyczy innych przypadków, a nie apt. Nie przeczytałeś ostatniego akapitu? A może pierwsze zdanie?
terdon