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"

# Гирифтани рӯйхати равандҳо, вақти кор, 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

Муҳим аст, ки меъёрҳо ва ҳаддҳоро бодиққат танзим кунед, то аз қатъ кардани ниятии равандҳои муҳими системӣ пешгирӣ шавад.