답변:
짧은 버전 :
cat /var/run/reboot-required.pkgs
설명:
요청한 정보를 자동으로 추출하는 쉬운 방법이있는 것 같습니다.
.deb
파일 내부 에는 postinst
(설치 후 실행)을 포함하여 설치를위한 제어 파일이 있습니다 .
예를 들면, linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb
,
postinst
포함
my $notifier = "/usr/share/update-notifier/notify-reboot-required";
my $warn_reboot = 'Yes'; # Warn that we are installing a version of
# the kernel we are running
과
# Warn of a reboot
if (-x $notifier) {
system($notifier);
}
쉘 스크립트
/usr/share/update-notifier/notify-reboot-required
업데이트
/var/run/reboot-required
와 /var/run/reboot-required.pkgs
.
후자의 파일에는 재부팅을 요청하는 패키지 목록이 포함되어 있습니다.
존재 unattended-upgrades
하는 것으로 확인되면 재부팅을 권장 /var/run/reboot-required
합니다. 이 파일은 postinst
일부 패키지에서 (설치 후) 스크립트로 작성되며 다음과 같습니다.
[ -x /usr/share/update-notifier/notify-reboot-required ] && \
/usr/share/update-notifier/notify-reboot-required || true
어떤 패키지가이를 트리거했는지 확인하려면 /var/run/reboot-required.pkgs
파일 의 내용을 살펴볼 수 있습니다 .
자세한 내용은 이 스레드를 참조하십시오 .
Olli의 이전 답변을 바탕으로 시스템에 재부팅 해야하는 현재 설치된 모든 패키지를 찾는 방법을 찾았습니다.
~$ mkdir debs
~$ cd debs
~/debs$ apt-get download $(dpkg -l | tail -n +7 | awk '{print $2}')
다운로드가 완료 될 때까지 기다리십시오. 내 시스템에서 약 900MB이므로 연결에 따라 시간이 걸릴 수 있습니다. 그때:
~/debs$ for x in $(ls); do y=$(dpkg-deb -I "$x" postinst 2>/dev/null | grep 'reboot-required'); if [ -n "$y" ]; then echo "$x" | grep -Poe '^.*?(?=_)'; fi; done
출력 결과는 다음과 같습니다.
dbus
gconf2
initscripts
libc6
libpam0g
libpam-systemd
libssl1.0.0
linux-image-3.19.0-47-generic
linux-image-3.19.0-49-generic
network-manager
upstart
물론이 방법은 완벽하지 않습니다. 'notify-reboot-required'이외의 다른 방법을 통해 필요한 재부팅에 대해 알리는 패키지가있을 수 있으며, 이것은 현재 설치된 패키지 중 어느 것이 재부팅이 필요하거나 필요하지 않은지를 보여 주지만 나중에 동일하게 적용되는지는 확실하지 않습니다 동일한 패키지의 버전.
grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'
. 단지 어떤 패키지보고합니다 그러나주의 할 수 없는 어떤 패키지, 약간의 시간에 재부팅이 필요 했던 재부팅을 요구하는 이 시간
재부팅이 필요한 다른 패키지가 있는지는 모르겠지만 커널 업데이트는 항상 있습니다. 나는 거의 재부팅을 요구할 때마다 커널이 업데이트되었다고 말하고 싶다.
/var/run/reboot-required
은 하루 전에 생성되었지만/var/run/reboot-required.pkgs
@ Ubuntu 16.04.5 LTS 파일 이 없습니다 .