Middle+
Long killer nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Long Killer Unix/Linux sistemlərində istifadə olunan, müəyyən edilmiş vaxtdan çox işləyən prosesləri tapıb zorla dayandırmaq üçün hazırlanmış istifadəçi skriptidir. Ümumiyyətlə, resursların idarə olunması və sistemin donmasının qarşısını almaq üçün istifadə olunur. Bu, Bash və ya Python kimi müxtəlif skript dillərində həyata keçirilə bilər.
İş prinsipi:
- İşə salınmış proseslərin siyahısının müəyyən edilməsi (məsələn,
psvasitəsilə). - Müxtəlif meyarlara görə proseslərin filtrlənməsi (istifadəçi, komanda adı və s.).
- Hər bir maraqlı prosesin işləmə müddətinin müəyyən edilməsi.
- Bu müddətin əvvəlcədən təyin olunmuş sərhəd dəyəri ilə müqayisəsi.
- Bu sərhədi aşan proseslərə sonlandırma siqnalı göndərilməsi (məsələn,
SIGTERMvə yaSIGKILL).
Bashda nümunə:
#!/bin/bash
# Sərhəd vaxtı saniyə ilə
THRESHOLD_SECONDS=3600 # 1 saat
# Axtarış üçün proses adı. Boş buraxın '', əgər bütün istifadəçi proseslərini axtarmaq istəyirsinizsə
PROCESS_NAME=""
# Prosesləri işlədən istifadəçi. Boş buraxın '', əgər bütün istifadəçilərin proseslərini axtarmaq istəyirsinizsə
USER=""
# İstisna prosesləri ad ilə xaric et (boşluqla ayrılmış)
EXCLUDE_PROCESSES="sshd bash long_killer.sh"
# Proseslərin siyahısını, işləmə vaxtını (ET), PID, komanda adı və istifadəçi adını alın
ps -eo etime,pid,cmd,user --no-headers | while read ET PID CMD USER_NAME; do
# İşləmə vaxtını saniyəyə çevir
SECS=0
if [[ "$ET" =~ ([0-9]+)-([0-9]+):([0-9]+):([0-9]+) ]]; then # Gün- saat: dəqiqə: saniyə
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 # Saat: dəqiqə: saniyə
SECS=$(( ${BASH_REMATCH[1]}*3600 + ${BASH_REMATCH[2]}*60 + ${BASH_REMATCH[3]} ))
elif [[ "$ET" =~ ([0-9]+):([0-9]+) ]]; then # Dəqiqə: saniyə
SECS=$(( ${BASH_REMATCH[1]}*60 + ${BASH_REMATCH[2]} ))
elif [[ "$ET" =~ ([0-9]+) ]]; then # Saniyə
SECS=${BASH_REMATCH[1]}
fi
# Sonlandırma şərtlərini yoxlayın
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
# İstisna siyahısını yoxlayın
for EXCLUDE in $EXCLUDE_PROCESSES; do
if [[ "$CMD" == *"$EXCLUDE"* ]]; then
KILL=false
break
fi
done
# Bütün şərtlər ödənərsə və bu skript deyilsə, prosesi dayandırın
if [ "$KILL" = true ] && [ "$PID" != "$$" ]; then
echo "$ET müddətində işləyən $PID ($CMD) prosesini dayandırmaq"
kill $PID # Zorla dayandırmaq üçün kill -9 $PID istifadə edilə bilər
fi
done
Bu skript periodik olaraq, məsələn, Crontab vasitəsilə işlədilə bilər.
# Hər dəqiqə işlət
* * * * * /path/to/your/long_killer.sh >> /var/log/long_killer.log 2>&1
Əhəmiyyətli: meyarlar və sərhədlər diqqətlə tənzimlənməlidir ki, vacib sistem proseslərinin təsadüfən dayandırılmasının qarşısı alınsın.