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
Маанилүү процесстерди случайдуу токтотуудан сактануу үчүн критерийлерди жана чектерди так орнотуу маанилүү.