我需要该命令来终止自给定进程至少运行 5 分钟以来一直在运行的进程。
我将不得不每五分钟左右运行一次该命令。
太感谢了 !
(系统是Centos5)
小智 22
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
Run Code Online (Sandbox Code Playgroud)
其中“procname”是进程名称,300 是运行时间阈值
我的kill脚本版本,从之前的两个答案中受益:
#!/bin/bash
#Email to send report
MY_EMAIL="example@email.com"
#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
Run Code Online (Sandbox Code Playgroud)
它通过 UID、NAME 过滤进程,如果执行时间超过限制 - 终止进程并将报告发送到电子邮件。如果您不需要该电子邮件 - 您可以只评论最后一行。
小智 2
我在此页面上找到了解决方案:http://www.directadmin.com/forum/showthread.php ?t=26179
创建一个空文件并将其命名为killlongproc.sh
#!/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;
Run Code Online (Sandbox Code Playgroud)
在你的 cronjob 中停止这个
15 * * * * * root /{directory}/./killongproc.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47175 次 |
| 最近记录: |