Middle+
Ի՞նչ է long killer-ը։
sobes.tech AI
Պատասխան AI-ից
Long Killer – օգտագործողի սցրիպտ Unix/Linux համակարգում, որը նախատեսված է երկար ժամանակ աշխատող պրոցեսների որոնման և հարկադիր ավարտման համար: Հաճախ օգտագործվում է ռեսուրսների կառավարման և համակարգի կախվածության կանխարգելման համար: Կարող է իրականացվել տարբեր սցրիպտային լեզուներով, ինչպիսիք են Bash կամ Python:
Աշխատանքի սկզբունքը՝
- Սկսած պրոցեսների ցանկի որոշում (օրինակ,
ps-ի միջոցով): - Պրոցեսների ֆիլտրում տարբեր չափանիշներով (օգտագործող, հրամանի անուն և այլն):
- Յուրաքանչյուր հետաքրքրող պրոցեսի աշխատանքի տևողության որոշում:
- Տևողության համեմատում նախապես սահմանված շեմի հետ:
- Հաղորդագրության ուղարկում պրոցեսներին, որոնք գերազանցել են շեմը (
SIGTERMկամSIGKILL):
Bash-ում իրականացնելու օրինակ՝
#!/bin/bash
# Շեմը՝ վայրկյաններով
THRESHOLD_SECONDS=3600 # 1 ժամ
# Փնտրվող պրոցեսի անունը։ Թողեք դատարկ՝ '', եթե ուզում եք փնտրել բոլոր պրոցեսները
PROCESS_NAME=""
# Օգտագործողը, որի անունով են սկսվել պրոցեսները։ Թողեք դատարկ՝ '', եթե ուզում եք փնտրել բոլոր օգտագործողներին
USER=""
# Ապացույց պրոցեսների անունները (առանց քառակուսիների)
EXCLUDE_PROCESSES="sshd bash long_killer.sh"
# Պրոցեսների ցանկը, աշխատանքի ժամանակը (ET), PID, հրամանի անունը և օգտագործողը
ps -eo etime,pid,cmd,user --no-headers | while read ET PID CMD USER_NAME; do
# Աշխատանքի ժամանակը վայրկյաններով
SECS=0
if [[ "$ET" =~ ([0-9]+)-([0-9]+):([0-9]+):([0-9]+) ]]; then # Օր-ժամ:րոպե:վայրկյան
SECS=$(( ${BASH_REMATCH[1]}*86400 + ${BASH_REMATCH[2]}*3600 + ${BASH_REMATCH[3]}*60 + ${BASH_REMATCH[4]} ))
elif [[ "$ET" =~ ([0-9]+):([0-9]+):([0-9]+) ]]; then # Ժամ:րոպե:վայրկյան
SECS=$(( ${BASH_REMATCH[1]}*3600 + ${BASH_REMATCH[2]}*60 + ${BASH_REMATCH[3]} ))
elif [[ "$ET" =~ ([0-9]+):([0-9]+) ]]; then # Մինիտ:վայրկյան
SECS=$(( ${BASH_REMATCH[1]}*60 + ${BASH_REMATCH[2]} ))
elif [[ "$ET" =~ ([0-9]+) ]]; then # Վայրկյան
SECS=${BASH_REMATCH[1]}
fi
# Շերտերի ստուգում՝ ավարտելու համար
KILL=false
if [ "$SECS" -gt "$THRESHOLD_SECONDS" ]; then
KILL=true
fi
if [ -n "$PROCESS_NAME" ] && [[ ! "$CMD" =~ "$PROCESS_NAME" ]]; then
KILL=false
fi
if [ -n "$USER" ] && [ "$USER_NAME" != "$USER" ]; then
KILL=false
fi
# Ապացույցների ցանկի ստուգում
for EXCLUDE in $EXCLUDE_PROCESSES; do
if [[ "$CMD" == *"$EXCLUDE"* ]]; then
KILL=false
break
fi
done
# Պրոցեսի ավարտում, եթե բոլոր պայմանները կատարվեն և դա չլինի այս սցրիպտը
if [ "$KILL" = true ] && [ "$PID" != "$$" ]; then
echo "Պրոցես $PID ($CMD) ավարտվում է, աշխատել է $ET"
kill $PID # Կարող եք օգտագործել kill -9 $PID ուժեղ ավարտի համար
fi
done
Այս սցրիպտը կարող եք գործարկել պլանավորել, օրինակ, Crontab-ի միջոցով:
# Յուրաքանչյուր րոպե
* * * * * /path/to/your/long_killer.sh >> /var/log/long_killer.log 2>&1
Կարևոր է մանրակրկիտ կարգավորել չափանիշներն ու շեմերը՝ կանխելու համար կարևոր համակարգային պրոցեսների անզգուշական ավարտը։