Bagaimana saya bisa tahu, dari baris perintah, apakah mesin memerlukan reboot?

256

Ketika Anda menginstal pembaruan tertentu (misalnya kernel baru) di Ubuntu Desktop, Anda mendapatkan indikasi bahwa reboot diperlukan (di Lucid, ikon logout berubah menjadi merah).

Bagaimana saya bisa memeriksa, dari baris perintah, apakah server Ubuntu memerlukan reboot?

Saya dapat menerima 'Sistem restart diperlukan' /etc/motd, tapi saya ingin solusi yang lebih elegan. Juga, saya ingin solusi yang berfungsi di rilis yang lebih lama, misalnya Hardy (8.04 LTS).

Marius Gedminas
sumber
Jika Anda memelihara server, Anda akan segera mengetahui apakah pembaruan perlu atau tidak dimulai ulang. Sebagian besar pembaruan tidak perlu memulai ulang atau hanya memulai ulang layanan (penyihir harus dilakukan secara otomatis).
eXlin

Jawaban:

289

Anda cukup memeriksa apakah file itu /var/run/reboot-requiredada atau tidak.

Misalnya, salah satu dari ini akan memberi tahu Anda "tidak ada file seperti itu" atau "file tidak ditemukan" jika Anda tidak perlu melakukan reboot, jika tidak (jika Anda perlu reboot) file akan ada dan perintah ini akan menampilkan informasi tentang file:

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

Dalam skrip bash, Anda dapat menggunakan:

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
  echo 'reboot required'
fi
Weboide
sumber
1
Ini bekerja, dan itu bekerja pada Hardy juga. (Tidak berfungsi pada Dapper - 6.06 - yang masih saya miliki di satu mesin. Tangguh.) Kebetulan, file yang diperlukan / var / run / reboot dibuat oleh / usr / share / update-notifier / notify-reboot -required yang dipanggil dari skrip pengelola berbagai paket.
Marius Gedminas
2
Ini akan bekerja pada Dapper juga jika saya menginstal paket pembaruan-notifier, kecuali bahwa ia ingin menarik barang-barang GNOME senilai 120 MB ke server kuno saya.
Marius Gedminas
10
Lebih baik instal update-notifier-common, itu tidak tergantung pada hal-hal GUI (tetapi tidak ada untuk Dapper).
Marius Gedminas
1
FWIW, pembaruan-notifier-common tidak diinstal pada Lucid server secara default.
Marius Gedminas
5
Terima kasih! dan file tersebut /var/run/reboot-required.pkgsakan mencantumkan paket yang membutuhkan reboot.
nealmcb
44

Dalam paket, debian-goodies adalah perintah bernama checkrestartyang cukup berguna. Outputnya dapat membantu Anda menghindari reboot penuh.

Ini memberitahu Anda yang menjalankan aplikasi yang memuat pustaka bersama yang ditingkatkan ketika aplikasi sedang berjalan. Anda kemudian me-restart aplikasi dan layanan secara manual dan menghindari reboot penuh. Namun, tidak membantu dengan peningkatan kernel.

aquaherd
sumber
1
Bagaimana itu bisa membuat saya menghindari reboot penuh?
Oxwivi
11
Ini memberi tahu Anda, aplikasi mana yang menjalankan memuat pustaka bersama yang ditingkatkan ketika aplikasi sedang berjalan. Anda kemudian me-restart aplikasi dan layanan secara manual dan menghindari reboot penuh. Namun, tidak membantu dengan peningkatan kernel.
aquaherd
Ini harus menjadi jawaban teratas. Sangat membantu. OpenSUSE memiliki alat bawaan (dan juga membantu Anda bagaimana Anda menjalankannya). Malu Ubuntu hanya berjalan "restart, restart". Misalnya colord perlu di-restart di sini. Makanya, tidak perlu restart.
Shiki
@ aquaherd Komentar yang sangat membantu - mungkin layak memindahkannya ke jawaban Anda?
Duncan Jones
33

Biasanya kalau file

/var/run/reboot-required 

ada Anda harus reboot. Anda dapat melihat apakah file ini ada di sana dengan menggunakan perintah sederhana ini di gnome-terminal.

ls /var/run/reboot-required
Kone4040
sumber
File ini tampaknya tidak dibuat lagi dari update-notifier-common yang digunakan untuk membuatnya.
Scott
17

Serta metode paling langsung yang ditulis oleh orang lain ada indikasi berguna jika Anda menggunakan byobu - satu set skrip untuk membuat layar GNU sedikit lebih ramah pengguna. Ini menunjukkan serangkaian informasi di bagian bawah layar, dan itu dapat mencakup apakah diperlukan boot ulang - bersama dengan apakah pembaruan tersedia, waktu, waktu aktif, memori yang digunakan ...

Dalam tangkapan layar ini Anda dapat melihat dari 199!garis bawah dengan latar belakang merah bahwa ada 199 pembaruan yang tersedia. A !! berarti bahwa ada beberapa pembaruan keamanan . Menu di latar depan memilih pemberitahuan status mana yang harus ditampilkan.

Jika reboot diperlukan maka ini akan ditunjukkan oleh simbol yang (R)ditampilkan di bar bawah dengan teks putih pada latar belakang biru. Rincian lebih lanjut dan indikator lainnya dapat dibaca di halaman manual byobu .

tangkapan layar

Hamish Downer
sumber
9

The /etc/motdFile mendapat informasinya tentang apakah reboot diperlukan dari /var/run/reboot-requiredberkas.

Anda dapat memeriksa konten file ini di terminal dengan menggunakan cat /etc/motdperintah

ajmitch
sumber
update-notifier-common digunakan untuk membuat ini tetapi tidak lagi
Scott
8

Jika Anda menginstal paket reboot-notifier atau update-notifier-common, maka Anda mendapatkan file / var / run / reboot-diperlukan dan /var/run/reboot-required.pkgs

reboot-notifier lebih baru di Ubuntu Wily dan Xenial. Peregangan Debian, tapi di jessie-backport

update-notifier-common Lebih tua, di semua versi Ubuntu termasuk Xenial dan Debian Wheezy. Tidak dalam Debian Stretch atau Jessie.

(Ada beberapa latar belakang untuk paket boot-notifier di https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Jika Anda tidak menginstal paket ini maka Anda dapat membandingkan versi paket linux yang diinstal, dengan versi yang berjalan:

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 ([email protected]) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian <b>3.16.7-ckt20-1+deb8u3</b> (2016-01-17)

Anda dapat melihat di sini bahwa kernel terinstal terbaru adalah 3.16.7-ckt20-1 + deb8u4 tetapi menjalankan kernel 3.16.7-ckt20-1 + deb8u3. Jadi sistem ini membutuhkan reboot. The u4 vs u3 tepat di akhir.

Anda mungkin perlu menggulir kotak di atas. Dalam versi / proc /, itu adalah versi di dekat akhir baris yang penting.

Perubahan kode versi yang sangat kecil adalah tipikal dari pembaruan kernel keamanan Debian.

perlu kembali

Pilihan lain adalah menginstal needrestartpaket.

sudo apt-get install needrestart
sudo needrestart -k

Tampaknya berfungsi meskipun perlu dipasang kembali setelah kernel ditingkatkan.

Tim Bray
sumber
1
Bagaimana paragraf pertama Anda berkorelasi dengan versi Ubuntu?
muru
Poin bagus. Terima kasih. Saya telah menghabiskan begitu lama pengujian dan mencoba paket yang saya lewatkan itu. Saya telah mengedit untuk membuat lebih jelas dan menyertakan info paket ubuntu.
Tim Bray
Kembali ke 8.04, setelah pembaruan yang membutuhkan restart, Cog akan berubah menjadi merah. Bagaimana saya mendapatkan perilaku itu kembali?
PenguinCSC
Ubuntu 14,04, saya dapatkandpkg-query: no packages found matching linux-image-*
the_nuts
Unknown option: kdi Ubuntu 14.04.
Cees Timmerman
7

Saya menambahkan berikut ini ke file .bash-alias saya:

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

Tampak lebih sederhana daripada menginstal paket untuk tugas yang relatif sederhana ini. Lalu saya jalankan:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 
Capricorn1
sumber
1

Solusi orang miskin:

#!/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

(Perhatikan: Tiga case kurung siku dengan spasi putih di dalamnya harus "[<spasi> <tab>]".)

Enrique Perez-Terron
sumber
grub 2 tidak menggunakan /boot/grub/menu.lst lagi, sekarang /boot/grub/grub.cfg sekarang.
Marius Gedminas
-1

Bukan jawaban untuk pertanyaan itu, tapi peringatan mengenai beberapa tanggapan: /var/run/reboot-requiredadalah tidak sumber terpercaya atau tidak reboot sebenarnya diperlukan.

Tes sederhana: ketika kernel baru tersedia, instal, reboot. Setelah reboot, jalankan apt autoremoveuntuk menyingkirkan beberapa kernel lama, tidak lagi diperlukan. Setelah Anda menjalankannya, ini akan menyatakan bahwa reboot diperlukan, yang sepenuhnya omong kosong.

Tink
sumber
3
Nah, menghapus kernel menghasilkan kembali file konfigurasi grub Anda, setelah itu mungkin ide yang baik untuk reboot, untuk memverifikasi bahwa Anda masih bisa boot. Setidaknya itulah cara saya membenarkan fitur (salah) ini untuk diri saya sendiri.
Marius Gedminas