मैं कैसे बता सकता हूं, कमांड लाइन से, क्या मशीन को रिबूट की आवश्यकता है?


256

जब आप उबंटू डेस्कटॉप में कुछ अपडेट (जैसे एक नया कर्नेल) स्थापित करते हैं, तो आपको एक संकेत मिलता है कि रिबूट की आवश्यकता है (ल्यूसिड में, लॉगआउट आइकन लाल हो जाता है)।

मैं कमांड लाइन से कैसे जांच सकता हूं, क्या उबंटू सर्वर को रिबूट की आवश्यकता है?

मैं 'सिस्टम रिस्टार्ट आवश्यक' के लिए grep कर सकता हूं /etc/motd, लेकिन मैं ऐसा समाधान चाहूंगा जो अधिक सुरुचिपूर्ण हो। इसके अलावा, मैं एक समाधान चाहता हूं जो पुराने रिलीज में काम करता है, उदाहरण के लिए हार्डी (8.04 एलटीएस)।


यदि आप सर्वर बनाए रख रहे हैं, तो आप जल्द ही समझदारी को विकसित करेंगे या अपडेट को पुनरारंभ करने की आवश्यकता नहीं होगी। अधिकांश अद्यतनों के लिए सेवा को पुनः आरंभ करने या केवल पुनः आरंभ करने की आवश्यकता नहीं है (इसे स्वचालित रूप से करना चाहिए)।
eXlin

जवाबों:


289

आप बस यह देख सकते हैं कि फाइल /var/run/reboot-requiredमौजूद है या नहीं।

उदाहरण के लिए, इनमें से कोई भी आपको "ऐसी कोई फ़ाइल नहीं" या "फ़ाइल नहीं मिली" बताएगा यदि आपको रिबूट करने की आवश्यकता नहीं है, अन्यथा (यदि आपको रिबूट करने की आवश्यकता है) तो फ़ाइल मौजूद होगी और ये आदेश फ़ाइल के बारे में जानकारी दिखाएंगे:

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

बैश स्क्रिप्ट में, आप उपयोग कर सकते हैं:

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

1
यह काम करता है, और यह हार्डी पर भी काम करता है। (Dapper - 6.06 पर काम नहीं करता है - जो मेरे पास अभी भी एक मशीन पर है। कठिन है।) संयोग से, / var / run / रिबूट-आवश्यक फ़ाइल / usr / शेयर / अपडेट-नोटिफ़ायर / नोटिफ़िकेशन-रीबूट द्वारा बनाई गई है। -अनुभवी जो विभिन्न पैकेजों की अनुरक्षक लिपियों से आक्रांत है।
मारियस गेदमिनस

2
अगर मैं अपडेट-नोटिफ़ायर पैकेज स्थापित करता हूं, तो यह डैपर पर भी काम करेगा, सिवाय इसके कि यह मेरे प्राचीन सर्वर में १२० मेगाहर्ट्ज के सामान को गिराना चाहता है।
मारियस गेदमिनस

10
बेहतर इंस्टॉल अपडेट-नोटिफायर-सामान्य, यह किसी भी जीयूआई सामान पर निर्भर नहीं करता है (लेकिन डॅपर के लिए मौजूद नहीं है)।
मारीस गेदमिनस

1
एफडब्ल्यूआईडब्ल्यू, अपडेट-नोटिफ़ायर-सामान्य डिफ़ॉल्ट रूप से ल्यूसिड सर्वर पर स्थापित नहीं है।
मारीस गेदमिनस

5
धन्यवाद! और फ़ाइल /var/run/reboot-required.pkgsरिबूट की आवश्यकता वाले पैकेजों को सूचीबद्ध करेगी।
nealmcb

44

पैकेज में डेबियन-गुडीज़ एक कमांड है जिसका नाम checkrestartकाफी उपयोगी है। इसका आउटपुट आपको पूर्ण रीबूट से बचने में मदद कर सकता है।

यह आपको बताता है कि कौन से रनिंग एप्लिकेशन ने साझा लाइब्रेरी लोड की हैं जो कि एप्लिकेशन चल रहे होते समय अपग्रेड किए गए थे। फिर आप एप्लिकेशन और सेवाओं को मैन्युअल रूप से पुनरारंभ करते हैं और पूर्ण रीबूट से बचते हैं। हालांकि, कर्नेल उन्नयन के साथ मदद नहीं करता है।


1
यह मुझे पूर्ण रीबूट से कैसे बचा सकता है?
ऑक्सीविवि

11
यह आपको बताता है कि कौन से एप्लिकेशन ने साझा लाइब्रेरी को लोड किया है जो कि एप्लिकेशन चल रहा था, जबकि अपग्रेड किए गए थे। फिर आप एप्लिकेशन और सेवाओं को मैन्युअल रूप से पुनरारंभ करते हैं और पूर्ण रीबूट से बचते हैं। हालांकि, कर्नेल उन्नयन के साथ मदद नहीं करता है।
एक्वेरेड

यह शीर्ष उत्तर होना चाहिए। बहुत उपयोगी। OpenSUSE को अंतर्निहित टूल मिला (और यह भी आपकी मदद करता है कि आप इसे कैसे चला सकते हैं)। शर्म करो उबुन्टू बस "रिस्टार्ट, रिस्टार्ट" जाता है। उदाहरण के लिए, कोलोर्ड को यहां एक पुनरारंभ की आवश्यकता थी। इसलिए, पुनरारंभ करने की कोई आवश्यकता नहीं है।
शकि

@aquaherd बहुत उपयोगी टिप्पणी - आपके उत्तर में आगे बढ़ने लायक हो सकती है?
डंकन जोन्स

33

आम तौर पर अगर फ़ाइल

/var/run/reboot-required 

मौजूद है आपको रिबूट करना चाहिए। आप देख सकते हैं कि क्या यह फाइल gnome-terminal में इस सरल कमांड का उपयोग करके है।

ls /var/run/reboot-required

यह फ़ाइल उस अपडेट-नोटिफ़ायर-कॉमन से बनाई गई नहीं दिखती जो इसे बनाने के लिए उपयोग किया जाता है।
स्कॉट

17

यदि आप बायोबू का उपयोग करते हैं, तो दूसरों द्वारा लिखे गए सबसे प्रत्यक्ष तरीकों के साथ-साथ एक आसान संकेत है - जीएनयू स्क्रीन को थोड़ा और उपयोगकर्ता के अनुकूल बनाने के लिए स्क्रिप्ट का एक सेट। यह स्क्रीन के नीचे जानकारी का एक सेट दिखाता है, और इसमें यह भी शामिल हो सकता है कि रिबूट की आवश्यकता है या नहीं - अद्यतन उपलब्ध होने के साथ-साथ समय, अपटाइम, मेमोरी का उपयोग किया जाता है ...

इस स्क्रीनशॉट में आप 199!नीचे की ओर लाल पृष्ठभूमि के साथ देख सकते हैं कि 199 अपडेट उपलब्ध हैं। ए का !! मतलब है कि कुछ सुरक्षा अपडेट हैं । अग्रभूमि में मेनू चयन कर रहा है कि कौन सी स्थिति सूचनाएं प्रदर्शित की जानी चाहिए।

यदि एक रिबूट की आवश्यकता है, तो यह (R)नीली पृष्ठभूमि पर सफेद पाठ के साथ निचले पट्टी में प्रदर्शित प्रतीक द्वारा दर्शाया जाएगा । अधिक विवरण और अन्य संकेतकों को बायोबू मैन पेज के बारे में पढ़ा जा सकता है ।

स्क्रीनशॉट


9

/etc/motdफ़ाइल एक रिबूट की आवश्यकता नहीं है कि क्या के बारे में अपनी जानकारी हो जाता है /var/run/reboot-requiredफ़ाइल।

आप cat /etc/motdकमांड का उपयोग करके टर्मिनल में इस फ़ाइल की सामग्री की जांच कर सकते हैं


अपडेट-नोटिफ़ायर-आम इसे बनाने के लिए इस्तेमाल किया गया था, लेकिन अब नहीं है
स्कॉट

8

यदि आपके पास रिबूट-नोटिफ़ायर या अपडेट-नोटिफ़ायर-कॉमन पैकेज स्थापित हैं, तो आपको फ़ाइलें / var / रन / रिबूट-आवश्यक और /var/run/reboot-required.pkgs मिलता है।

रिबूट-नोटिफ़ायर उबंटू विली और एक्सनियल में नया है। डेबियन खिंचाव, लेकिन जेसी-बैकपोर्ट में

अपडेट-नोटिफ़ायर-सामान्य , एक्सनियल और डेबियन व्हीज़ी सहित सभी उबंटू संस्करणों में पुराना है। डेबियन स्ट्रेच या जेसी में नहीं।

( Https:// स्तनपान.cloud.geek.nz/posts/introducing-reboot-notifier/ पर रिबूट-नोटिफ़ायर पैकेज की कुछ पृष्ठभूमि है )

यदि आपके पास ये पैकेज स्थापित नहीं हैं, तो आप इंस्टॉल किए गए संस्करण के साथ स्थापित किए गए लिनक्स पैकेज के संस्करण की तुलना कर सकते हैं:

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 / संस्करण में, यह उस पंक्ति के अंत के पास का संस्करण है जो मायने रखता है।

बहुत मामूली संस्करण कोड परिवर्तन एक डेबियन सुरक्षा कर्नेल अपडेट के लिए विशिष्ट है।

needrestart

एक अन्य विकल्प needrestartपैकेज स्थापित करना है।

sudo apt-get install needrestart
sudo needrestart -k

कर्नेल के अपग्रेड होने के बाद भी जरूरत पड़ने पर काम करने लगता है।


1
कैसे अपने पहले पैराग्राफ Ubuntu संस्करणों के साथ सहसंबंधित करता है?
मुरु

अच्छी बात। धन्यवाद। मैंने इतना लंबा परीक्षण बिताया और उन पैकेजों को आज़माने की कोशिश की, जो मुझे याद नहीं थे। मैंने स्पष्ट करने के लिए संपादन किया है और ubuntu पैकेज की जानकारी शामिल की है।
टिम ब्रे

8.04 पर वापस जाएं, एक अपडेट की आवश्यकता के बाद, कोग लाल हो जाएगा। मुझे वह व्यवहार वापस कैसे मिलेगा?
पेंग्विनसीएससी

Ubuntu 14.04, मुझे मिलता हैdpkg-query: no packages found matching linux-image-*
the_nuts

Unknown option: kउबंटू में 14.04।
सेस टिम्मरमैन

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

(सूचना: अंदर सफेद स्थान वाले वर्ग कोष्ठक के तीन मामले "[<स्थान> <टैब>]" होना चाहिए।)


ग्रब 2 में /boot/grub/menu.lst का उपयोग नहीं किया गया है, यह अब /boot/grub/grub.cfg है।
मारियस गेदमिनस

-1

सवाल का एक जवाब नहीं, लेकिन जवाब के कई के बारे में एक चेतावनी: /var/run/reboot-requiredहै किया जाए या नहीं एक रिबूट वास्तव में आवश्यक है का एक विश्वसनीय स्रोत।

सरल परीक्षण: जब एक नया कर्नेल उपलब्ध हो जाता है, तो इसे स्थापित करें, रिबूट करें। रिबूट के बाद, apt autoremoveकुछ पुराने से छुटकारा पाने के लिए चलाएं , अब आवश्यकता नहीं है, गुठली। आपके द्वारा चलाए जाने के बाद, यह बताएगा कि रिबूट की आवश्यकता है, जो पूर्ण बकवास है।


3
खैर, एक कर्नेल को हटाने से आपकी ग्रब कॉन्फिग फाइल फिर से जेनरेट हो जाती है, जिसके बाद यह रिबूट करने का एक अच्छा विचार है कि आप अभी भी बूट कर सकते हैं। कम से कम यह है कि मैं इस (गलत) सुविधा को अपने लिए कैसे उचित ठहरा रहा हूं।
मेरियस गेडमिनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.