Middle+
Mis on long killer?
sobes.tech AI
Vastus AI-lt
Long Killer – kasutaja skript Unix/Linux süsteemis, mis on mõeldud otsima ja sundima lõpetama protsesse, mis töötavad kauem kui määratud aeg. Tavaliselt kasutatakse ressurside haldamiseks ja süsteemi hangimise vältimiseks. Seda saab rakendada erinevates skriptikeeltes, näiteks Bash või Python.
Tööpõhimõte:
- Aktiivsete protsesside nimekirja määramine (näiteks
psabil). - Protsesside filtreerimine erinevate kriteeriumide järgi (kasutaja, käskluse nimi jne).
- Iga huvipakkuva protsessi tööaja määramine.
- Tööaja võrdlemine eelnevalt määratud piiriga.
- Signaali saatmine protsessidele, mis ületavad piiri (
SIGTERMvõiSIGKILL).
Näide Bashis:
#!/bin/bash
# Piirang sekundites
THRESHOLD_SECONDS=3600 # 1 tund
# Otsitava protsessi nimi. Jäta tühjaks '', kui soovid otsida kõiki kasutaja protsesse
PROCESS_NAME=""
# Kasutaja, kelle nimel protsessid on käivitatud. Jäta tühjaks '', kui soovid otsida kõiki kasutajaid
USER=""
# Välista protsessid nime järgi (eraldatud tühikuga)
EXCLUDE_PROCESSES="sshd bash long_killer.sh"
# Protsesside nimekiri, nende tööaeg (ET), PID, käskluse nimi ja kasutaja
ps -eo etime,pid,cmd,user --no-headers | while read ET PID CMD USER_NAME; do
# Muuta tööaeg sekunditeks
SECS=0
if [[ "$ET" =~ ([0-9]+)-([0-9]+):([0-9]+):([0-9]+) ]]; then # Päevad-ajad:minutid:sekundid
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 # Kellad:minutid:sekundid
SECS=$(( ${BASH_REMATCH[1]}*3600 + ${BASH_REMATCH[2]}*60 + ${BASH_REMATCH[3]} ))
elif [[ "$ET" =~ ([0-9]+):([0-9]+) ]]; then # Minutid:sekundid
SECS=$(( ${BASH_REMATCH[1]}*60 + ${BASH_REMATCH[2]} ))
elif [[ "$ET" =~ ([0-9]+) ]]; then # Sekundid
SECS=${BASH_REMATCH[1]}
fi
# Kontrolli lõpetamise tingimusi
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
# Kontrolli välistuste nimekirja
for EXCLUDE in $EXCLUDE_PROCESSES; do
if [[ "$CMD" == *"$EXCLUDE"* ]]; then
KILL=false
break
fi
done
# Protsessi lõpetamine, kui kõik tingimused on täidetud ja see ei ole käesolev skript
if [ "$KILL" = true ] && [ "$PID" != "$$" ]; then
echo "Lõpetan protsessi $PID ($CMD), mis töötas $ET"
kill $PID # Võib kasutada ka kill -9 $PID jõuga lõpetamiseks
fi
done
Seda skripti saab ajastada, näiteks Crontabi abil.
# Käivitatakse iga minuti jooksul
* * * * * /path/to/your/long_killer.sh >> /var/log/long_killer.log 2>&1
Oluline on hoolikalt seadistada kriteeriumid ja piirid, et vältida oluliste süsteemiprotsesside juhuslikku lõpetamist.