Làm thế nào tôi có thể biết, từ dòng lệnh, liệu máy có yêu cầu khởi động lại không?


256

Khi bạn cài đặt một số cập nhật nhất định (ví dụ: kernel mới) trong Ubuntu Desktop, bạn sẽ nhận được một dấu hiệu cho thấy cần phải khởi động lại (trong Lucid, biểu tượng đăng xuất chuyển sang màu đỏ).

Làm cách nào tôi có thể kiểm tra, từ dòng lệnh, liệu máy chủ Ubuntu có yêu cầu khởi động lại không?

Tôi có thể grep cho 'Yêu cầu khởi động lại hệ thống' /etc/motd, nhưng tôi muốn một giải pháp thanh lịch hơn. Ngoài ra, tôi muốn một giải pháp hoạt động trong các bản phát hành cũ hơn, ví dụ Hardy (8.04 LTS).


Nếu bạn đang duy trì máy chủ, bạn cũng sẽ sớm phát triển ý thức hoặc không cập nhật yêu cầu khởi động lại. Hầu hết các bản cập nhật không cần khởi động lại hoặc chỉ khởi động lại dịch vụ (phù hợp nên tự động thực hiện).
eXlin

Câu trả lời:


289

Bạn chỉ có thể kiểm tra xem tập tin /var/run/reboot-requiredcó tồn tại hay không.

Ví dụ: bất kỳ tệp nào trong số này sẽ cho bạn biết "không tìm thấy tệp nào" hoặc "không tìm thấy tệp" nếu bạn không cần khởi động lại, nếu không (nếu bạn cần khởi động lại) thì tệp sẽ tồn tại và các lệnh này sẽ hiển thị thông tin về tệp:

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

Trong tập lệnh bash, bạn có thể sử dụng:

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

1
Điều này hoạt động, và nó cũng hoạt động trên Hardy. (Không hoạt động trên Dapper - 6.06 - mà tôi vẫn có trên một máy. Tough.) -được yêu cầu được gọi từ các tập lệnh bảo trì của các gói khác nhau.
Marius Gedminas

2
Nó cũng hoạt động trên Dapper nếu tôi cài đặt gói trình thông báo cập nhật, ngoại trừ việc nó muốn kéo các công cụ Gnome trị giá 120 megs vào máy chủ cũ của tôi.
Marius Gedminas

10
Cài đặt tốt hơn thông báo cập nhật, nó không phụ thuộc vào bất kỳ nội dung GUI nào (nhưng không tồn tại cho Dapper).
Marius Gedminas

1
FWIW, mặc định-trình thông báo cập nhật không được cài đặt trên máy chủ Lucid theo mặc định.
Marius Gedminas

5
Cảm ơn! và tập tin /var/run/reboot-required.pkgssẽ liệt kê các gói yêu cầu khởi động lại.
nealmcb

44

Trong gói debian-goodies là một lệnh có tên checkrestartkhá hữu ích. Đầu ra của nó có thể giúp bạn tránh khởi động lại đầy đủ.

Nó cho bạn biết những ứng dụng đang chạy nào đã tải các thư viện chia sẻ đã được nâng cấp trong khi ứng dụng đang chạy. Sau đó, bạn khởi động lại các ứng dụng và dịch vụ theo cách thủ công và tránh khởi động lại đầy đủ. Không giúp nâng cấp kernel, mặc dù.


1
Làm thế nào nó có thể làm cho tôi tránh khởi động lại đầy đủ?
Oxwivi

11
Nó cho bạn biết, những ứng dụng đang chạy đã tải các thư viện chia sẻ đã được nâng cấp trong khi ứng dụng đang chạy. Sau đó, bạn khởi động lại các ứng dụng và dịch vụ theo cách thủ công và tránh khởi động lại đầy đủ. Không giúp nâng cấp kernel, mặc dù.
thủy thủ

Đây phải là câu trả lời hàng đầu. Rất hữu ích. OpenSUSE có một công cụ tích hợp (và cũng giúp bạn làm thế nào bạn có thể chạy nó). Xấu hổ Ubuntu chỉ đi "khởi động lại, khởi động lại". Ví dụ colord cần khởi động lại ở đây. Do đó, không cần phải khởi động lại.
Shiki

@aquaherd Nhận xét rất hữu ích - có thể đáng để chuyển câu trả lời của bạn?
Duncan Jones

33

Thông thường nếu tập tin

/var/run/reboot-required 

tồn tại bạn nên khởi động lại. Bạn có thể xem tập tin này có ở đó không bằng cách sử dụng lệnh đơn giản này trong gnome-terminal.

ls /var/run/reboot-required

Tập tin này dường như không được tạo nữa từ bản cập nhật-thông báo chung được sử dụng để tạo nó.
Scott

17

Cũng như các phương thức trực tiếp nhất được viết bởi người khác, có một dấu hiệu hữu ích nếu bạn sử dụng byobu - một tập lệnh để làm cho màn hình GNU thân thiện hơn với người dùng. Nó hiển thị một tập hợp thông tin ở phía dưới màn hình và có thể bao gồm việc có cần khởi động lại hay không - cùng với việc có cập nhật hay không, thời gian, thời gian hoạt động, bộ nhớ được sử dụng ...

Trong ảnh chụp màn hình này, bạn có thể nhìn thấy từ 199!dòng dưới cùng với nền đỏ có 199 bản cập nhật có sẵn. Một !! có nghĩa là một số là cập nhật bảo mật . Menu ở phía trước đang chọn thông báo trạng thái nào sẽ được hiển thị.

Nếu cần phải khởi động lại thì điều này sẽ được biểu (R)thị bằng biểu tượng hiển thị ở thanh dưới với văn bản màu trắng trên nền màu xanh. Thông tin chi tiết và các chỉ số khác có thể được đọc trong trang man byobu .

ảnh chụp màn hình


9

Các /etc/motdtập tin nhận thông tin về việc khởi động lại được yêu cầu từ /var/run/reboot-requiredtập tin.

Bạn có thể kiểm tra nội dung của tệp này trong thiết bị đầu cuối bằng cách sử dụng cat /etc/motdlệnh


update-notifier-common được sử dụng để tạo cái này nhưng không còn nữa
Scott

8

Nếu bạn đã cài đặt các gói phổ biến khởi động lại hoặc thông báo cập nhật-thông báo cập nhật, thì bạn sẽ nhận được các tệp / var / run / restart-required và /var/run/reboot-required.pkgs

trình thông báo khởi động lại mới hơn trong Ubuntu Wily và Xenial. Debian kéo dài, nhưng trong jessie-backports

update-notifier-common Đã cũ hơn, trong tất cả các phiên bản Ubuntu bao gồm Xenial và Debian Wheezy. Không có trong Debian Stretch hay Jessie.

(Có một số thông tin cơ bản về gói trình thông báo khởi động lại tại https://feed.cloud.geek.nz/posts/int sinhing-report-notifier / )

Nếu bạn chưa cài đặt các gói này thì bạn có thể so sánh phiên bản của gói linux đã cài đặt, với phiên bản đang chạy:

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)

Bạn có thể thấy ở đây, kernel được cài đặt mới nhất là 3.16.7-ckt20-1 + deb8u4 nhưng kernel đang chạy là 3.16.7-ckt20-1 + deb8u3. Vì vậy, hệ thống này cần khởi động lại. Các u4 vs u3 ngay ở cuối.

Bạn có thể cần phải cuộn hộp ở trên. Trong / Proc / phiên bản, đó là phiên bản gần cuối dòng quan trọng.

Thay đổi mã phiên bản rất nhỏ là điển hình của bản cập nhật kernel bảo mật Debian.

cần

Một lựa chọn khác là cài đặt needrestartgói.

sudo apt-get install needrestart
sudo needrestart -k

Có vẻ như hoạt động ngay cả khi Needrestart được cài đặt sau khi kernel được nâng cấp.


1
Đoạn đầu tiên của bạn tương quan với các phiên bản Ubuntu như thế nào?
muru

Điểm tốt. Cảm ơn. Tôi đã dành quá nhiều thời gian để thử nghiệm và thử các gói mà tôi đã bỏ lỡ. Tôi đã chỉnh sửa để làm rõ hơn và bao gồm thông tin gói ubfox.
Tim Bray

Quay trở lại vào ngày 8.04, sau khi cập nhật yêu cầu khởi động lại, Cog sẽ chuyển sang màu đỏ. Làm thế nào để tôi có được hành vi đó trở lại?
PenguinCSC

Ubuntu 14.04, tôi nhận đượcdpkg-query: no packages found matching linux-image-*
the_nuts

Unknown option: ktrong Ubuntu 14.04.
Cees Timmerman

7

Tôi đã thêm phần sau vào tệp .bash-aliases của mình:

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

Có vẻ đơn giản hơn là cài đặt một gói cho nhiệm vụ tương đối đơn giản này. Sau đó tôi mới chạy:

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

1

Giải pháp của người nghèo:

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

(Lưu ý: Ba trường hợp dấu ngoặc vuông có khoảng trắng bên trong phải là "[<dấu cách> <tab>]".)


grub 2 không sử dụng /boot/grub/menu.lst nữa, bây giờ là /boot/grub/grub.cfg.
Marius Gedminas

-1

Không phải là một câu trả lời cho các câu hỏi, nhưng một caveat về một số các câu trả lời: /var/run/reboot-requiredkhông một nguồn đáng tin cậy hay không khởi động lại được thực sự cần thiết.

Kiểm tra đơn giản: khi một kernel mới có sẵn, hãy cài đặt nó, khởi động lại. Sau khi khởi động lại, hãy chạy apt autoremoveđể loại bỏ một số hạt nhân cũ, không còn cần thiết. Sau khi bạn chạy nó, nó sẽ nói rằng cần phải khởi động lại, điều này hoàn toàn vô nghĩa.


3
Chà, loại bỏ kernel tạo lại tập tin cấu hình grub của bạn, sau đó có lẽ nên khởi động lại, để xác minh rằng bạn vẫn có thể khởi động. Ít nhất đó là cách tôi biện minh cho tính năng (mis) này với bản thân mình.
Marius Gedminas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.