यह वही था जिसकी मैं तलाश कर रहा था, और पिछले कुछ समय से इसका उपयोग कर रहा था (थोड़ा बदला हुआ)। हाल ही में, मैंने अपने काम में एक बग रखा है लेकिन ऐप (गेम सर्वर) को चालू रखने की आवश्यकता है।
मैंने उस हिस्से को उद्धृत किया था जहां सबसे ऊपर पीआईडी को मार दिया जाता है, क्योंकि यह गलत पीआईडी को मार रहा था।
यहाँ आपकी स्क्रिप्ट का मेरा नवीनतम ड्राफ्ट है, अब तक, यह सबसे अधिक अधिभार पाता है और इसे प्रभावी रूप से मारता है (जब भी यह कुछ भी करता है तो मुझे जानकारी के साथ ईमेल करता है);
#!/bin/bash
## Note: will kill the top-most process if the $CPU_LOAD is greater than the $CPU_THRESHOLD.
echo
echo checking for run-away process ...
CPU_LOAD=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
CPU_THRESHOLD=300
PROCESS=$(ps aux r)
TOPPROCESS=$(ps -eo pid -eo pcpu -eo command | sort -k 2 -r | grep -v PID | head -n 1)
if [ $CPU_LOAD -gt $CPU_THRESHOLD ] ; then
# kill -9 $(ps -eo pid | sort -k 1 -r | grep -v PID | head -n 1) #original
# kill -9 $(ps -eo pcpu | sort -k 1 -r | grep -v %CPU | head -n 1)
kill -9 $TOPPROCESS
echo system overloading!
echo Top-most process killed $TOPPROCESS
echo load average is at $CPU_LOAD
echo
echo Active processes...
ps aux r
# send an email using mail
SUBJECT="Runaway Process Report at Marysol"
# Email To ?
EMAIL="myemail@somewhere.org"
# Email text/message
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "System overloading, possible runaway process."> $EMAILMESSAGE
echo "Top-most process killed $TOPPROCESS" >>$EMAILMESSAGE
echo "Load average was at $CPU_LOAD" >>$EMAILMESSAGE
echo "Active processes..." >>$EMAILMESSAGE
echo "$PROCESS" >>$EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
else
echo
echo no run-aways.
echo load average is at $CPU_LOAD
echo
echo Active processes...
ps aux r
fi
exit 0
यह छोटी स्क्रिप्ट बेहद उपयोगी रही है, अगर आपको यह पसंद नहीं है कि किसी भी प्रक्रिया को मार दिया जाए, तो ईमेल अकेले आपको सूचित रखने में मदद करेगा।