Ubuntu 16.04: 무인 업그레이드가 무작위로 실행됩니다.

Ubuntu 16.04: 무인 업그레이드가 무작위로 실행됩니다.

보안 패키지를 설치하고 설치 시 메일로 알리도록 무인 업그레이드를 구성했습니다.

나는 설치가 매우 무작위로 일어나는 것을 발견했습니다. 최신 버전에서는 cron.daily 실행 시간부터 최대 30분까지 무작위 지연이 추가된 것으로 알고 있습니다.

그러나 내가 겪고 있는 지연은 그보다 훨씬 더 큽니다. 오전 9시, 오후 3시, 오전 12시에 무인 업그레이드가 실행되는 것을 확인했습니다. 로그에도 동일하게 표시되므로 이메일 전달에만 시간이 더 오래 걸리는 것이 아닙니다.

무인 업그레이드 작업은 cron.daily의 첫 번째 작업입니다. 즉, 실행 시간이 오래 걸리는 이전 작업이 없다는 의미입니다.

비슷한 일을 겪은 사람이 있나요?

답변1

이것을 디버깅한 후 해결책을 찾았습니다.

이 문제의 근본 원인은 Ubuntu 16.04 이상에서 무인 업그레이드가 cron이 아닌 systemd를 사용하여 엄청난 무작위 지연으로 업데이트를 예약한다는 사실에 있습니다.

/lib/systemd/system/apt-daily.timer으로 구성됩니다

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

즉, 하루에 두 번, 6시와 18시에 실행되며 최대 12시간의 무작위 지연이 발생합니다. 프로덕션 환경에서는 이것이 항상 허용되는 것은 아니기 때문에 이러한 설정을 재정의해야 했습니다.

패키지 구성 파일을 그대로 유지하기 위해 다음에서 재정의를 정의했습니다./etc/systemd/system/apt-daily.timer.d/override.conf(업데이트: 파일 이름과 위치에 대한 자세한 내용은 이 답변 하단의 편집 내용을 읽어보십시오. 약간 변경될 수 있는 것 같습니다.

거기에 내가 설정

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

무인 업그레이드가 6시에 실행되고 최대 1시간의 무작위 지연이 발생합니다.

그런 다음 간단히 타이머를 다시 시작했습니다 systemctl restart apt-daily.timer(결국 데몬을 다시 로드해야 함).

이제 무인 업데이트가 예측 가능한 시간에 다시 실행됩니다!

편집하다: Ubuntu 18.04에서는 상황이 약간 변경된 것처럼 보입니다. 이제 재정의가 다음 위치에 저장되어야 합니다./etc/systemd/system/apt-daily-upgrade.timer.d/override.conf그리고 다음과 같이 보입니다:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck은 아래 주석에서 올바른 이름과 위치로 대체 파일을 생성하는 방법을 언급했습니다. 수동으로 파일을 생성하는 대신 다음을 실행해 보세요.sudo systemctl edit apt-daily.timer

답변2

다양한 소스에서 컴파일하고 시스템에서 테스트한 무인 업그레이드 시간을 업데이트하는 가장 좋은 방법은 다음과 같습니다.systemctl명령을 독점적으로 사용하십시오편집할 적절한 파일을 찾으려고 시도하지 마세요.

확실히 알아야 할 유일한 것은 서비스 이름입니다. 우리의 경우에는apt-daily-upgrade(확실하지 않은 경우 를 통해 검색하세요 $ systemctl | grep apt). 시스템 서비스에 타이머가 정의되어 있으면 로 참조되므로 우리를 위한 #{service_name}.timer것입니다 apt-daily-upgrade.timer.

시스템 구성을 편집하면 안 되므로 다음을 수행해야 합니다.기본 타이머 구성 재정의체계적으로. 이를 위해서는 원본 구성의 일부 부분을 복사 편집해야 하므로 먼저 이를 보여드리겠습니다.

$ systemctl cat apt-daily-upgrade.timer 
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

섹션 에서 OnCalendar및 값을 업데이트해야 합니다 . 다음 명령을 통해 재정의 구성 파일을 생성해 보겠습니다.RandomizedDelaySec[Timer]

$ systemctl edit apt-daily-upgrade.timer

이렇게 하면 빈 파일이 있는 편집기가 열리고 [Timer]최소한 다음과 같이 수정된 섹션을 거기에 넣어야 합니다.

[Timer]
# Reset the system calendar config first
OnCalendar=
# Set a new calendar timer with a 60 minute threshold
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

보시다시피 OnCalendar아침이 아닌 저녁에 자동 업데이트를 트리거하도록 값을 업데이트했습니다. 그 위의 빈 OnCalendar줄은 다음과 같이 나타나야 합니다.이 구성 값은첨가물즉, 두 번 이상 지정할 수 있으며 공백 값으로만 ​​설정하면 모든 이전 OnCalendar값(시스템 구성의 값)이 재설정됩니다.

파일을 저장하고 나면 위와 같이 다시 실행하여 systemd가 이에 대해 알고 있는지 확인할 수 있습니다(실행할 필요가 없으며 systemctl daemon-reload명령 edit이 편집기를 종료할 때 이를 수행함) .systemctl

$ systemctl cat apt-daily-upgrade.timer

# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
# Reset the system calendar config first
OnCalendar=
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

이제 사용자 정의 구성이 기본 구성을 재정의하는 두 가지 구성을 보여줍니다. 좋은!

모든 것이 예상대로 작동하는지 최종 확인은 다음 list-timers명령을 통해 수행할 수 있습니다 systemctl.

$ systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
...
Thu 2020-08-06 21:51:36 UTC 12h left      Thu 2020-08-06 07:10:20 UTC 2h 20min ago apt-daily-upgrade.timer      apt-daily-upgrade.service               
...             

출력에서 적절한 줄을 찾아 NEXT열을 살펴보세요. 거기에 있는 값은 새로 구성된 무인 업그레이드 시간을 반영해야 합니다.

답변3

공식 데비안 문서https://wiki.debian.org/UnattendedUpgrades현재 많은 사람들을 오해하게 만드는 실수가 있습니다. 라는 파일을 생성하여 업그레이드 시간을 무시할 수 있다고 주장합니다.

/etc/systemd/system/apt-daily-upgrade.d/override.conf

그러나 올바른 경로는

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

답변4

그만큼apt-daily.timer하루에 두 번 실행되도록 설정되어 있으며 업데이트가 필요한 패키지를 간단히 업데이트하고 다운로드하므로 프로덕션 환경을 중단하지 않습니다. 재정의하면됩니다.apt-daily-upgrade.timer업데이트가 실제로 설치되는 시점이므로 프로덕션 환경에 영향을 미칠 가능성이 적은 시점으로 설정됩니다. 또한 50번의 무인 업그레이드에서 재부팅이 필요한 경우 실제로 적용되도록 설정을 고려해야 하며 타이머도 있는 경우 재부팅 설정이 있습니다. 또한 22.04부터 업그레이드 타이머가 기본 오전 6시 + 1시간으로 변경되었으므로 대부분은 이를 변경할 필요가 없습니다.

관련 정보