Middle+
Long killer nima?
sobes.tech AI
AIdan javob
Long Killer Unix/Linux tizimlarida ishlatiladigan, belgilangan vaqtdan ortiq ishlayotgan jarayonlarni topish va majburan to'xtatish uchun mo'ljallangan foydalanuvchi skriptidir. Odatda resurslarni boshqarish va tizimning to'xtashini oldini olish uchun ishlatiladi. Bash yoki Python kabi turli skript tillarida amalga oshirilishi mumkin.
Ishlash prinsipi:
- Ishga tushirilgan jarayonlar ro'yxatini aniqlash (masalan,
psyordamida). - Jarayonlarni turli mezonlarga (foydalanuvchi, buyruq nomi va boshqalar) ko'ra filtrlash.
- Har bir qiziqarli jarayonning ishlash muddatini aniqlash.
- Ushbu muddatni oldindan belgilangan chegaraviy qiymat bilan solishtirish.
- Chegarani oshgan jarayonlarga signal yuborish (masalan,
SIGTERMyokiSIGKILL).
Bashda misol:
#!/bin/bash
# Chegara vaqti sekundlarda
THRESHOLD_SECONDS=3600 # 1 soat
# Qidirilayotgan jarayon nomi. Bo'sh qoldiring '', agar barcha foydalanuvchi jarayonlarini qidirmoqchi bo'lsangiz
PROCESS_NAME=""
# Jarayonlarni ishga tushirgan foydalanuvchi. Bo'sh qoldiring '', agar barcha foydalanuvchilarning jarayonlarini qidirmoqchi bo'lsangiz
USER=""
# Noma'lum jarayonlarni chiqarib tashlash (bo'sh joy bilan ajratilgan)
EXCLUDE_PROCESSES="sshd bash long_killer.sh"
# Jarayonlar ro'yxatini, ularning ishlash vaqtini (ET), PID, buyruq nomi va foydalanuvchi
ps -eo etime,pid,cmd,user --no-headers | while read ET PID CMD USER_NAME; do
# Ishlash vaqtini sekundlarga o'tkazish
SECS=0
if [[ "$ET" =~ ([0-9]+)-([0-9]+):([0-9]+):([0-9]+) ]]; then # Kun-soat:minut:sekund
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 # Soat:minut:sekund
SECS=$(( ${BASH_REMATCH[1]}*3600 + ${BASH_REMATCH[2]}*60 + ${BASH_REMATCH[3]} ))
elif [[ "$ET" =~ ([0-9]+):([0-9]+) ]]; then # Minut:sekund
SECS=$(( ${BASH_REMATCH[1]}*60 + ${BASH_REMATCH[2]} ))
elif [[ "$ET" =~ ([0-9]+) ]]; then # Sekund
SECS=${BASH_REMATCH[1]}
fi
# To'xtatish shartlarini tekshirish
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
# Noma'lum jarayonlar ro'yxatini tekshirish
for EXCLUDE in $EXCLUDE_PROCESSES; do
if [[ "$CMD" == *"$EXCLUDE"* ]]; then
KILL=false
break
fi
done
# Jarayonni, agar barcha shartlar bajarilgan bo'lsa va bu skript emas bo'lsa, to'xtatish
if [ "$KILL" = true ] && [ "$PID" != "$$" ]; then
echo "Jarayon $PID ($CMD) $ET davom etmoqda"
kill $PID # Majburan to'xtatish uchun kill -9 $PID ishlatilishi mumkin
fi
done
Ushbu skriptni muntazam ravishda ishga tushirish uchun, masalan, Crontab yordamida rejalashtirish mumkin.
# Har minutda ishga tushirish
* * * * * /path/to/your/long_killer.sh >> /var/log/long_killer.log 2>&1
Muhim: mezonlar va chegaralarni ehtiyotkorlik bilan sozlash, muhim tizim jarayonlarini noto'g'ri to'xtatishni oldini olish uchun zarur.