क्या मुझे पैक्मैन अपग्रेड के बाद पुनः आरंभ करना चाहिए?


17

चलने के बाद

sudo pacman -Syyu

या

sudo pacman -S [something to install]

क्या मुझे सुरक्षित होने के लिए पुनः आरंभ करना चाहिए?

जवाबों:


10

यदि कर्नेल, ग्लिबक या सिस्टमड के अपडेट हैं, तो आप पुनः आरंभ करना चाह सकते हैं ताकि अपडेट किए गए संस्करण उपयोग में हों। यदि आपके पास, अपने डेस्कटॉप वातावरण में अपडेट, एक साधारण लॉगआउट / लॉगिन पर्याप्त है।


11

सबसे अच्छा तरीका यह है कि पुराने पुस्तकालयों को किन कार्यक्रमों / सेवाओं का उपयोग करें और उन्हें पुनः आरंभ करें। और आप 'lsof' का उपयोग करके सभी उपयोग की गई फ़ाइलों को सूचीबद्ध करके इसे प्राप्त कर सकते हैं और उन लोगों को खोज सकते हैं जिनके पास 'DEL' प्रकार है। DEL का मतलब फ़ाइलनाम को फ़ाइल सिस्टम से हटा दिया गया था लेकिन यह अभी भी मेमोरी में अटका हुआ है क्योंकि कोई इसका उपयोग करता है।

यहाँ पूरी कमांड लाइन है:

 sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u

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

6

रिबूट करने का एकमात्र अनिवार्य कारण एक नया कर्नेल है (और आप केक्सेक का उपयोग करके सॉफ्ट-रिबूट कर सकते हैं)। देखें https://wiki.archlinux.org/index.php/Kexec , जानकारी के लिए संक्षेप में:

  • नए कर्नेल, initramfs लोड करें और बूट cmdline निर्दिष्ट करें

    kexec -l /boot/new-kernel --initrd=/boot/new-initramfs --reuse-cmdline
    
  • आह्वान kexec( systemctlउचित शटडाउन के लिए उपयोग , kexec -eसीधे निष्पादित)

    systemctl kexec
    
  • ध्यान दें कि यदि आप kexec-load@.serviceविकी में बताए अनुसार बनाते हैं , यदि आप रिबूट करते हैं, तो systemdबायोसूट करने के kexecबजाय स्वचालित रूप से सॉफ्ट-रिबूट का उपयोग करेंगे

थोड़ा सा सुधरा हुआ संस्करण जो सिस्टमड सर्विस के नाम देता है:

PIDS="(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u)"
for PID in $PIDS; do
    systemctl status $i
done | grep '●' | awk '{print $2}' | sort -u

या एक-पंक्ति:

for i in $(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u); do systemctl status $i; done | grep '●' | awk '{print $2}' | sort -u

ध्यान दें कि कुछ मुद्दे हैं:

  • systemctl daemon-reload कुछ भी पुनः आरंभ करने से पहले निष्पादित किया जाना चाहिए
  • यदि पीआईडी ​​1 ( systemdखुद) को पुनः आरंभ करने की आवश्यकता है, तो इसका उपयोग किया जा सकता हैsystemctl daemon-reexec
  • systemctl restart dbus.service कुछ अन्य सेवाओं को तोड़ता है, उन्हें dbus पुनरारंभ के बाद फिर से शुरू करने की आवश्यकता होती है:
    • systemd अपने आप: systemctl daemon-reexec
    • systemd-logind
    • systemd-machined
    • शायद अन्य systemd - * / अन्य सेवाएं जो (भारी) उपयोग करती हैं dbus
  • यदि आप SSH और SSH के माध्यम से जुड़े हुए हैं, तो आपको पुनः आरंभ करने की आवश्यकता है, लेकिन systemctl restart sshdजब तक आप जुड़े रहेंगे , तब तक इसे पुनः आरंभ नहीं किया जाएगा, मुझे 2 विकल्प दिखाई देते हैं:
    • टाइमर systemctl restart sshdका उपयोग कर अनुसूचीat/cron/systemd
    • SSHदूसरे रिमोट (सुरक्षित) शेल का उपयोग करके पुनः आरंभ करेंmosh
  • रनिंग screen/tmuxसेवाओं SSHको पुनरारंभ करने से भी रोक सकता है , सेवाओं को पुनरारंभ करने से पहले इन सत्रों को बंद करने का सबसे आसान तरीका है
  • जैसा कि पिछले उत्तर में बताया गया है, विशेषकर चित्रमय सत्रों के लिए लॉगआउट / लॉगिन की आवश्यकता हो सकती है

1
क्या आप यह समझाने में जवाब देना चाहेंगे कि कैसे kexec का उपयोग किया जाता है?
रुई एफ रिबेरो

0

एक आसान तरीका यह है कि डिस्क पर नवीनतम कर्नेल पर चलने वाले कर्नेल के संस्करण की तुलना की जाए। मुझे एक स्क्रिप्ट मिली, जो आसानी से कर सकती है।

जैसा कि मैंने कई कर्नेल स्थापित किए हैं, मैंने स्क्रिप्ट को केवल चलने वाले कर्नेल के अनुरूप जांचने के लिए संशोधित किया है। उदाहरण के लिए, मेरे पास वर्तमान में 4.9.79 और 4.14.16 संस्करण स्थापित हैं और इस प्रकार /boot/vmlinuz-4.14-x86_64 की जाँच करने की आवश्यकता है। दुर्भाग्य से यह तब काम नहीं करेगा जब मैं संस्करण 5.1 का उपयोग करना शुरू करता हूं, इसलिए एक अपडेट की आवश्यकता होगी (4 को 3 से बदलें) या मुझे और अधिक मजबूत तरीका खोजने की आवश्यकता है।

यहाँ मेरी स्क्रिप्ट है:

#!/bin/sh
NEXTLINE=0
FIND=""
CURRENT_KERNEL=`uname -r`
KERNEL_PATH="/boot/vmlinuz-${CURRENT_KERNEL:0:4}"
for I in `file $KERNEL_PATH*`; do
  if [ ${NEXTLINE} -eq 1 ]; then
    FIND="${I}"
    NEXTLINE=0
   else
    if [ "${I}" = "version" ]; then NEXTLINE=1; fi
  fi
done
    if [ ! "${FIND}" = "" ]; then
      if [ ! "${CURRENT_KERNEL}" = "${FIND}" ]; then
    echo "Boot required"
  else echo "No boot required"
  fi
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.