apt-get 업데이트 및 업그레이드 자동화 및 무인 만들기


28

내가 관리하는 데비안 서버는 약 7 대이며 자동으로 업데이트되도록 설정하고 싶습니다. 그래서 다음과 같이 스크립트를 만들었습니다.

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

root의 crontab 목록 에 배치했습니다 . 불행히도 항상 업그레이드 섹션에 매달리고 업그레이드 할 것인지 묻습니다. 그것은 크론 작업이기 때문에 실패했다는 이메일을 보낼 때까지 출력을 볼 수 없습니다. 해당 프롬프트를 건너 뛰고 업그레이드를 자동으로 수행하는 방법이 있습니까?


3
... 또는 cron-apt.
derobert

답변:


46

-y 옵션을 사용하여 요청하지 않도록 apt-get하십시오. 보낸 사람 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.

DEBIAN_FRONTEND env 변수를 설정할 수도 있습니다

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
무엇을 DEBIAN_FRONTEND합니까? 다른 프로세스에도 사용됩니까?
Canadian Luke REINSTATE MONICA

내 홈 서버에서이 작업을 시도하고, 그것을 실행하자마자 가장 좋은 대답을 선택합니다
캐나다 누가 복음 복원 모니카

1
@CanadianLuke 여기 를 참조 하십시오DEBIAN_FRONTEND . 데비안에서는 언급되지 않았 man debconf으므로 우분투 일 수 있습니다.
terdon

@ terdon debconf에 대한 -doc 패키지가 없습니다. 그것은 사람의 7 절에서의 man 7 debconf)
Braiam

@Braiam 아, 알았어요 man 7 debconf. 지금은 알 이유 :
terdon

27

글쎄, 당신은 잘못된 도구를 사용하고 있습니다. unattended-upgradespackage는 매일 보안 업그레이드를 설치하고 (구성 가능), 업그레이드 할 패키지를 구성 할 수 있습니다. 다음을 사용하여 설치할 수 있습니다.

sudo apt-get install unattended-upgrades

보낸 사람 man unattended-upgrades:

구성은 apt 구성 메커니즘을 통해 수행됩니다. 기본 구성 파일은 /etc/apt/apt.conf.d/50unttended-upgrades에 있습니다.


@CanadianLuke 모든 구성을 읽지 /etc/apt/apt.conf.d/만 시작으로 시작한 구성 만 Unattended-Upgrade::구문 분석됩니다.
Braiam

나는 직장에서 서버 중 하나에서이 작업을 시도하고, 그것을 실행하자마자 가장 좋은 대답을 선택합니다
캐나다 누가 복음 복원 모니카

10

이전의 답변은 유익하지만 그들은 인간의 수단으로 요구되는 입력의 '문제'를 우회하지 않습니다 upgrade. 따라서 다음을 사용하고 있습니다.

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

커널과 같은 '배포'업그레이드를 포함하려면이 dist-upgrade명령을 사용하십시오 .

이 매개 변수에 대한 자세한 내용은 Manpgagedpkg 를 참조하십시오 .

importat note : 매개 변수를 sudo포함한 호출 -E이 필요합니다.

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.

그렇지 않으면, EXPORT명령문은 호출에 영향을 미치지 않습니다 apt-get!

신용은 레미 반 엘 스트 에게 간다 ! 감사!


1
업그레이드를 위해 다른 옵션을 추가 한 이유를 설명해 주시겠습니까?
FarO

1
또한 스크립트가 rott의 crontab에서 실행되는 경우 "sudo -E"가 필요합니까?
FarO

1
@FarO는 cronjob을 실행하려는 환경 / 컨텍스트에 따라 다릅니다. 일반적으로 이들은 다음에 의해 실행 root되므로 전혀 사용할 필요가 없습니다 sudo. '다른 옵션'은 어떤 경우에도 무인으로 실행되도록 설정되어 있습니다. 참조 man페이지를 참조 하십시오.
지터

4

이런 종류의 일반적인 도구는 yes다음과 같습니다.

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

예를 들어, 당신은 할 수 있습니다

yes | sudo apt-get upgrade 

@Braiam 또는 @ArthurUlfeldt에서apt-get upgrade 제안한 옵션 을 사용하는 경우 가 더 좋습니다.


내가 수동으로하고 싶을 때 붙여 넣은 줄은 apt-get update && yes | apt-get upgrade(우리 서버는 사용 sudo하지 않아야 합니다 ... 묻지 마십시오 ...)
Canadian Luke REINSTATE MONICA

옵션 대신에 트릭을 사용하는 이유는 무엇입니까? "-y"는 이미 적절한 상태입니다.
FarO

3
내가 대답에서 말했듯이, 이것은 이런 종류의 작업을위한 일반적인 도구 이므로이 대답은 apt가 아닌 다른 경우에 대한 것입니다. 마지막 단락을 읽지 않았습니까? 아니면 첫 번째 문장?
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.