GNU/Linux >> Belajar Linux >  >> Linux

Bunuh semua proses yang berjalan lebih dari 5 menit oleh pengguna tertentu dalam skrip bash linux

Solusi 1:

kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')

di mana "procname" adalah nama proses dan300 menjalankan ambang waktu

Solusi 2:

Mungkin menjalankan perintah yang berjalan lama seperti ini di crontab?

timeout -k 300 command

Solusi 3:

Skrip kill versi saya, memanfaatkan kedua jawaban sebelumnya:

#!/bin/bash

#Email to send report
MY_EMAIL="[email protected]"

#Process name to kill
NAME_KILL="php"

#UID to kill
UID_KILL=33.

#Time in seconds which the process is allowed to run
KILL_TIME=60

KILL_LIST=()
EMAIL_LIST=()
while read PROC_UID PROC_PID PROC_ETIMES PROC_ETIME PROC_COMM PROC_ARGS; do
    if [ $PROC_UID -eq $UID_KILL -a "$PROC_COMM" == "$NAME_KILL" -a $PROC_ETIMES -gt $KILL_TIME ]; then
    KILL_LIST+=("$PROC_PID");
    MSG="Killing '$PROC_ARGS' which runs for $PROC_ETIME";
    EMAIL_LIST+=("$MSG");
    echo "$MSG";
    fi
done < <(ps eaxo uid,pid,etimes,etime,comm,args | tail -n+2)
if [ ${#KILL_LIST[*]} -gt 0 ]; then
    kill -9 ${KILL_LIST[@]}
    printf '%s\n' "${EMAIL_LIST[@]}" | mail -s "Long running processes killed" $MY_EMAIL
fi

Ini memfilter proses berdasarkan UID, NAME, dan jika waktu eksekusi melebihi batas - matikan proses dan kirim laporan ke email. Jika Anda tidak memerlukan email itu - Anda cukup mengomentari baris terakhir.

Solusi 4:

Ada skrip di sini yang dapat Anda modifikasi untuk melakukan apa yang Anda inginkan.

EDIT menambahkan skrip di bawah ini

#!/bin/bash
#
#Put the UID to kill on the next line
UID_KILL=1001

#Put the time in seconds which the process is allowed to run below
KILL_TIME=300

KILL_LIST=`{
ps -eo uid,pid,lstart | tail -n+2 |
    while read PROC_UID PROC_PID PROC_LSTART; do
        SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
        if [ $PROC_UID -eq $UID_KILL -a $SECONDS -gt $KILL_TIME ]; then
        echo -n "$PROC_PID "
        fi
     done 
}`

if [[ -n $KILL_LIST ]]
then
        kill $KILL_LIST
fi

Solusi 5:

Saya menemukan solusinya di halaman ini:http://www.directadmin.com/forum/showthread.php?t=26179

Buat file kosong dan beri nama killlongproc.sh

Salin ini:

#!/bin/bash
# This script will kill process which running more than X hours
# egrep: the selected process; grep: hours
PIDS="`ps eaxo bsdtime,pid,comm | egrep "spamd|exim|mysqld|httpd" | grep " 1:" | awk '{print $2}'`"

# Kill the process
echo "Killing spamd, exim, mysqld and httpd processes running more than one hour..."
for i in ${PIDS}; do { echo "Killing $i"; kill -9 $i; }; done;

Hentikan ini di cronjob Anda

15 * * * * * root /{directory}/./killongproc.sh

Linux
  1. Cara Mengatur Batasan pada Proses yang Berjalan Pengguna di Linux

  2. Bagaimana Menambahkan Pengguna Unix/linux Dalam Skrip Bash?

  3. Linux – Apakah Ada Gui Untuk Linux yang Tidak Menggunakan X11?

  1. Bunuh semua proses pengguna tertentu melalui SSH

  2. Cara Membunuh Proses yang Berjalan di Linux

  3. Bagaimana saya bisa menulis skrip bash Linux yang memberi tahu saya komputer mana yang AKTIF di LAN saya?

  1. Pastikan setidaknya ada dua argumen yang diberikan dalam skrip bash

  2. Bagaimana cara mematikan semua proses dengan nama parsial yang diberikan?

  3. Bagaimana cara menggunakan Ctrl+C untuk mematikan semua proses latar belakang yang dimulai dalam skrip Bash?