Sobes.tech
Middle+

Long killer эмне?

sobes.tech AI

AIден жооп

Long Killer – Unix/Linux системинде колдонулган колдонуучу скрипти, ал узак убакыттан бери иштеп жаткан процесстерди издөө жана мажбурлап токтотуу үчүн арналган. Адатта, ресурстарды башкаруу жана системанын кармалышына жол бербөө үчүн колдонулат. Ал ар кандай скрипт тилдеринде, мисалы Bash же Python, ишке ашырылышы мүмкүн.

Ишке ашыруу принциби:

  1. Иштеп жаткан процесстердин тизмесин аныктоо (мисалы, ps аркылуу).
  2. Процесстерди ар кандай критерийлер боюнча фильтрлөө (пайдаланучу, команда аты жана башка).
  3. Ар бир кызыкчылык процесстин иштөө мөөнөтүн аныктоо.
  4. Иштөө мөөнөтүн алдын ала белгиленген чек менен салыштыруу.
  5. Чекен ашкан процесстерге сигнал жиберүү (мисалы, 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

Маанилүү процесстерди случайдуу токтотуудан сактануу үчүн критерийлерди жана чектерди так орнотуу маанилүү.