用于终止长时间运行的 PID 的 Shell 脚本

用于终止长时间运行的 PID 的 Shell 脚本

我希望有人能回答有关这个 shell 脚本的问题,这是我在接管别人的网站时刚刚获得的。这是他们的备份修复程序,用于捕获任何长时间运行的 Apache Worker,这些 Worker 是他们的应用程序未正确终止的(Web 服务器只运行此应用程序,不运行其他网站)。

如果这个脚本每分钟运行一次,我相信它会终止/usr/sbin/httpd运行时间超过 60 分钟的 PID。


主要问题:我MAXRUNMIN=60和 一样明白runTimeMin=$((runTimeSec / 60 ))。是否需要同时更改这两项才能将此限制从 60 分钟更改为 30 分钟?

后续问题:我看到它通过执行获取 PID 列表grep "/usr/sbin/httpd"。我如何才能将另一个进程也添加到此搜索中。例如,不仅要 grep 并检查以终止httpdPID,还要检查另一个进程(例如pythonPID)。

#!/bin/sh

##number of minutes to allow a process to run
MAXRUNMIN=60
PIDS=`pgrep httpd|xargs echo -e`
nowSeconds=`date +%s`
#for i in `ps aux | grep -vE 'grep|root' | grep httpd | awk ' { print $9 "-" $2 } '`
for i in `ps aux | grep -vE 'grep|root' | grep "/usr/sbin/httpd" | awk ' { print $9 "-" $2 } '`
do
        procStart=`echo $i|awk -F"-" '{print $1}'`
        procId=`echo $i|awk -F"-" '{print $2}'`
        procSec=`date -d"$procStart" +%s`
        runTimeSec=$((nowSeconds - procSec))
        runTimeMin=$((runTimeSec / 60 ))
        if [ $runTimeMin -gt $MAXRUNMIN ]
        then
                echo $PIDS|grep -q $procId
                if [ $? -eq 0 ]
                then
                        echo "process ID $procId has been running loger than $MAXRUNMIN minutes"
                        kill -9 $procId
                fi
        fi
done

答案1

您的脚本的作者可能没有意识到“ps”的可能性,例如“-u”(后跟所有者列表)或“-o etimes=”(以秒为单位给出经过的时间),这使得任务变得简单得多。我有一个脚本,它被称为“my_corona.sh”,它如下所示:

#! /usr/bin/ksh

# kills older processes

MCRNMAXMIN=60
MCRNPROGS="apache2|nginx"   # pipe separated list of executables
MCRNOWNERS="www-data"   # comma separated list of process owners


MCRNTIME=$(expr $MCRNMAXMIN \* 60)
ps -u $MCRNOWNERS -o pid=,etimes=,args= | grep -E "($MCRNPROGS)" \
| while read P T X
do
  if [ $MCRNTIME -lt $T ]
  then
     echo "$P $T $X  :: should be killed"
     kill -1 $P  # kill nicely
     sleep 5
     if kill -0 $P 2>/dev/null
     then
        echo "$P $T $X  :: didn't like it"
        kill -9 $P  # kill not so nicely
     fi
  # else
  #    echo "$P $T $X  :: should not be killed"
  fi
done

相关内容