명령 줄에서 시스템을 재부팅해야하는지 어떻게 알 수 있습니까?


256

Ubuntu Desktop에 특정 업데이트 (예 : 새 커널)를 설치하면 재부팅이 필요하다는 표시가 나타납니다 (Lucid에서 로그 아웃 아이콘이 빨간색으로 바)).

명령 행에서 Ubuntu 서버 를 재부팅 해야하는지 어떻게 확인할 수 있습니까?

에서 '시스템 다시 시작 필요'를 grep 할 수는 /etc/motd있지만 더 우아한 솔루션을 원합니다. 또한 Hardy (8.04 LTS)와 같은 이전 릴리스에서 작동하는 솔루션을 원합니다.


서버를 유지 관리하는 경우 곧 다시 시작해야하는지 또는 업데이트하지 않아도됩니다. 대부분의 업데이트는 다시 시작하거나 서비스를 다시 시작할 필요가 없습니다 (자동으로 전환해야 함).
eXlin

답변:


289

파일 /var/run/reboot-required이 있는지 여부를 간단히 확인할 수 있습니다 .

예를 들어, 재부팅 할 필요가없는 경우 "이러한 파일 없음"또는 "파일을 찾을 수 없음"이라는 메시지가 표시됩니다. 그렇지 않으면 (다시 부팅해야하는 경우) 파일이 존재하고 이러한 명령은 파일에 대한 정보를 표시합니다.

file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required

bash 스크립트에서 다음을 사용할 수 있습니다.

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
  echo 'reboot required'
fi

1
이것은 작동하며 Hardy에서도 작동합니다. (아직도 여전히 하나의 시스템에있는 Dapper-6.06에서는 작동하지 않습니다. 터프합니다.) 우연히 / var / run / reboot-required 파일은 / usr / share / update-notifier / notify-reboot에 의해 생성됩니다. -다양한 패키지의 관리자 스크립트에서 호출해야합니다.
Marius Gedminas

2
업데이트 알림 패키지를 설치하면 Dapper에서도 작동합니다. 단, 고대 서버에 120 megs의 그놈 항목을 가져 오는 것을 제외하고는.
Marius Gedminas

10
update-notifier-common을 더 잘 설치하면 GUI에 의존하지 않지만 Dapper에는 존재하지 않습니다.
Marius Gedminas

1
FWIW, update-notifier-common은 기본적으로 Lucid 서버에 설치되지 않습니다.
Marius Gedminas

5
감사! 파일 /var/run/reboot-required.pkgs에는 재부팅이 필요한 패키지가 나열됩니다.
nealmcb

44

패키지에서 debian-goodies checkrestart는 매우 유용한 명령 입니다. 출력으로 전체 재부팅을 피할 수 있습니다.

어떤 실행중인 응용 프로그램이 응용 프로그램을 실행하는 동안 업그레이드 된 공유 라이브러리를로드했는지 알려줍니다. 그런 다음 응용 프로그램과 서비스를 수동으로 다시 시작하고 전체 재부팅을 피하십시오. 그러나 커널 업그레이드에는 도움이되지 않습니다.


1
전체 재부팅을 피하려면 어떻게해야합니까?
Oxwivi

11
응용 프로그램이 실행되는 동안 업그레이드 된 공유 라이브러리를로드 한 실행중인 응용 프로그램을 알려줍니다. 그런 다음 응용 프로그램과 서비스를 수동으로 다시 시작하고 전체 재부팅을 피하십시오. 그러나 커널 업그레이드에는 도움이되지 않습니다.
aquaherd

이것이 최고의 답변이되어야합니다. 매우 도움이됩니다. OpenSUSE에는 도구가 내장되어 있으며이를 실행하는 데 도움이됩니다. 부끄러운 우분투는 "다시 시작, 다시 시작"합니다. 예를 들어 색상을 다시 시작해야했습니다. 따라서 다시 시작할 필요가 없습니다.
Shiki

@aquaherd 매우 유용한 의견-답변으로 옮겨 갈 가치가 있습니까?
던컨 존스

33

일반적으로 파일이

/var/run/reboot-required 

존재해야 재부팅합니다. gnome-terminal에서이 간단한 명령을 사용하여이 파일이 있는지 확인할 수 있습니다.

ls /var/run/reboot-required

이 파일은 더 이상 update-notifier-common에서 생성되지 않은 것으로 보입니다.
Scott

17

다른 사람이 작성한 가장 직접적인 방법뿐만 아니라 byobu 를 사용 하면 GNU 화면을 좀 더 사용자 친화적으로 만드는 스크립트 세트가 있습니다. 화면 하단에 일련의 정보가 표시되며 업데이트 사용 가능 여부, 시간, 가동 시간, 메모리 사용 여부와 함께 재부팅이 필요한지 여부가 포함될 수 있습니다 ...

이 스크린 샷 199!에서 맨 아래 줄에 빨간색 배경으로 199 개의 업데이트가 있음을 알 수 있습니다. A는 !! 일부 보안 업데이트 것을 의미합니다 . 포 그라운드의 메뉴는 표시 할 상태 알림을 선택합니다.

재부팅이 필요한 경우 (R)하단 막대에 파란색 배경에 흰색 텍스트가 표시된 기호로 표시됩니다. 자세한 내용 및 기타 지표는 byobu 매뉴얼 페이지 에서 확인할 수 있습니다 .

스크린 샷


9

/etc/motd파일은 다시 부팅에서 필요 여부에 대한 해당 정보를 얻을 /var/run/reboot-required파일.

cat /etc/motd명령 을 사용하여 터미널에서이 파일의 내용을 확인할 수 있습니다


update-notifier-common이 이것을 생성하는데 더 이상 사용하지 않습니다
Scott

8

reboot-notifier 또는 update-notifier-common 패키지가 설치되어 있으면 / var / run / reboot-required 및 /var/run/reboot-required.pkgs 파일이 생성됩니다.

reboot-notifier 는 Ubuntu Wily 및 Xenial에서 최신입니다. 데비안 스트레치, 그러나 jessie-backports

update-notifier-common Xenial 및 Debian Wheezy를 포함한 모든 Ubuntu 버전에서 이전 버전입니다. 데비안 스트레치 나 제시에는 없습니다.

( https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ 의 reboot-notifier 패키지에 대한 배경 지식이 있습니다. )

이러한 패키지가 설치되어 있지 않은 경우 설치된 Linux 패키지 버전과 실행중인 버전을 비교할 수 있습니다.

tim@tramp:~$ dpkg -l linux-image-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version               Architecture          Description
+++-=================================-=====================-=====================-=======================================================================
ii  linux-image-3.16.0-4-amd64        3.16.7-ckt20-1+deb8u4 amd64                 Linux 3.16 for 64-bit PCs
ii  linux-image-amd64                 3.16+63               amd64                 Linux for 64-bit PCs (meta-package)
tim@tramp:~$ more /proc/version
Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian <b>3.16.7-ckt20-1+deb8u3</b> (2016-01-17)

여기에서 최신 설치된 커널은 3.16.7-ckt20-1 + deb8u4이지만 커널 실행은 3.16.7-ckt20-1 + deb8u3입니다. 따라서이 시스템을 재부팅해야합니다. 마지막에 u4 대 u3이 있습니다.

위의 상자를 스크롤해야 할 수도 있습니다. / proc / version에서는 중요한 행 끝 부분의 버전입니다.

아주 작은 버전의 코드 변경은 일반적인 데비안 보안 커널 업데이트입니다.

다시 시작해야

다른 옵션은 needrestart패키지 를 설치하는 것 입니다.

sudo apt-get install needrestart
sudo needrestart -k

커널을 업그레이드 한 후 needrestart가 설치되어 있어도 작동하는 것 같습니다.


1
첫 번째 단락은 우분투 버전과 어떤 관련이 있습니까?
muru

좋은 지적. 감사. 나는 그 비트를 놓친 패키지를 테스트하고 시험하는 데 오랜 시간을 보냈습니다. 우분투 패키지 정보를 명확하게하고 포함하도록 편집했습니다.
Tim Bray

8.04로 돌아가서 다시 시작해야하는 업데이트 후 Cog가 빨간색으로 바뀝니다. 그 행동을 어떻게 되 찾을 수 있습니까?
PenguinCSC

우분투 14.04, 나는dpkg-query: no packages found matching linux-image-*
the_nuts

Unknown option: k우분투 14.04에서.
Cees Timmerman

7

.bash-aliases 파일에 다음을 추가했습니다.

alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'

이 비교적 간단한 작업을 위해 패키지를 설치하는 것보다 간단 해 보입니다. 그런 다음 방금 실행합니다.

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 

1

불쌍한 사람의 해결책 :

#!/bin/bash
default=$(sed -n 's/^default[   ]*\([0-9][0-9]*\).*/\1/p' /boot/grub/menu.lst | tail -1)
if [ "$default" = "" ]; then default=0; fi

want=$(sed -n 's/^kernel[       ]*\/boot\/vmlinuz-\([^  ]*\).*/\1/p' /boot/grub/menu.lst | sed -n "$((default+1))p")

running=$(uname -r)

if [ "$running" = "$want" ]
then
        : OK, do nothing
else
        echo "Running $running, want $want. Reboot required."
fi

(주의 사항 : 공백이있는 3 개의 대괄호는 "[<space> <tab>]"이어야합니다.)


grub 2는 /boot/grub/menu.lst를 더 이상 사용하지 않습니다. 이제는 /boot/grub/grub.cfg입니다.
Marius Gedminas

-1

질문에 대한 답변은 아니지만 몇 가지 응답에 대한 경고 는 재부팅이 실제로 필요한지 여부에 대한 신뢰할 수있는 출처 /var/run/reboot-required아닙니다 .

간단한 테스트 : 새 커널을 사용할 수있게되면 설치하고 재부팅하십시오. 재부팅 후 apt autoremove더 이상 필요하지 않은 오래된 커널을 제거하기 위해 실행하십시오 . 실행 한 후에는 재부팅이 필요하다는 메시지가 표시됩니다.


3
커널을 제거하면 grub 설정 파일이 다시 생성되고, 그 후에도 여전히 부팅 할 수 있는지 확인하기 위해 재부팅하는 것이 좋습니다. 적어도 그것이 내가 (나)이 특징을 나 자신에게 정당화하는 방법입니다.
Marius Gedminas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.