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"
# Гирифтани рӯйхати равандҳо, вақти кор, 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
Муҳим аст, ки меъёрҳо ва ҳаддҳоро бодиққат танзим кунед, то аз қатъ кардани ниятии равандҳои муҳими системӣ пешгирӣ шавад.