जवाबों:
सबसे अच्छा तरीका यह है कि पुराने पुस्तकालयों को किन कार्यक्रमों / सेवाओं का उपयोग करें और उन्हें पुनः आरंभ करें। और आप 'lsof' का उपयोग करके सभी उपयोग की गई फ़ाइलों को सूचीबद्ध करके इसे प्राप्त कर सकते हैं और उन लोगों को खोज सकते हैं जिनके पास 'DEL' प्रकार है। DEL का मतलब फ़ाइलनाम को फ़ाइल सिस्टम से हटा दिया गया था लेकिन यह अभी भी मेमोरी में अटका हुआ है क्योंकि कोई इसका उपयोग करता है।
यहाँ पूरी कमांड लाइन है:
sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u
रिबूट करने का एकमात्र अनिवार्य कारण एक नया कर्नेल है (और आप केक्सेक का उपयोग करके सॉफ्ट-रिबूट कर सकते हैं)। देखें 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
कुछ भी पुनः आरंभ करने से पहले निष्पादित किया जाना चाहिएsystemd
खुद) को पुनः आरंभ करने की आवश्यकता है, तो इसका उपयोग किया जा सकता हैsystemctl daemon-reexec
systemctl restart dbus.service
कुछ अन्य सेवाओं को तोड़ता है, उन्हें dbus पुनरारंभ के बाद फिर से शुरू करने की आवश्यकता होती है:
systemd
अपने आप: systemctl daemon-reexec
systemd-logind
systemd-machined
dbus
systemctl restart sshd
जब तक आप जुड़े रहेंगे , तब तक इसे पुनः आरंभ नहीं किया जाएगा, मुझे 2 विकल्प दिखाई देते हैं:
systemctl restart sshd
का उपयोग कर अनुसूचीat/cron/systemd
SSH
दूसरे रिमोट (सुरक्षित) शेल का उपयोग करके पुनः आरंभ करेंmosh
screen/tmux
सेवाओं SSH
को पुनरारंभ करने से भी रोक सकता है , सेवाओं को पुनरारंभ करने से पहले इन सत्रों को बंद करने का सबसे आसान तरीका हैएक आसान तरीका यह है कि डिस्क पर नवीनतम कर्नेल पर चलने वाले कर्नेल के संस्करण की तुलना की जाए। मुझे एक स्क्रिप्ट मिली, जो आसानी से कर सकती है।
जैसा कि मैंने कई कर्नेल स्थापित किए हैं, मैंने स्क्रिप्ट को केवल चलने वाले कर्नेल के अनुरूप जांचने के लिए संशोधित किया है। उदाहरण के लिए, मेरे पास वर्तमान में 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