it-swarm-vi.com

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?

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 Ubuntu máy chủ 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' trong /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).

250
Marius Gedminas

Bạn chỉ có thể kiểm tra xem tệp /var/run/reboot-required có 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
283
Weboide

Trong gói debian-goodies là một lệnh có tên checkrestart khá 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ù.

44
aquaherd

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
33
kone4040

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 byob - 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ể 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 khởi động lại thì điều này sẽ được biểu thị bằng ký hiệu (R) được 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 byob .

screenshot

17
Hamish Downer

Tệp /etc/motd nhận thông tin về việc có cần khởi động lại từ tệp /var/run/reboot-required không.

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 lệnh cat /etc/motd

9
ajmitch

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:

[email protected]:~$ rr
No reboot needed
[email protected]:~$ 
7
Capricorn1

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ố nền tảng cho gói trình thông báo khởi động lại tại https://feed.cloud.geek.nz/posts/int sinhing-revot-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:

[email protected]:~$ 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)
[email protected]:~$ 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)

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 tùy chọn khác là cài đặt gói needrestart.

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.

7
Tim Bray

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>]".)

1
Enrique Perez-Terron