繁体   English   中英

Shell脚本:如何比较进程运行时间与阈值?

[英]shell script: how to compare process running time against a theshold?

Bash脚本应检查某个进程是否正在运行超过特定的分钟数,如果运行超过了几分钟,则将其杀死。

我可以通过类似的方式获取运行时间

ps -aux | grep ProgramName | grep -v grep | awk '{print $10}'

例如9:47.31 但是,我应该在哪里进一步检查并确定该阈值是否大于10分钟?

这是用例需要的awk 1衬板:

ps -o etime -C ProgramName | awk -v MAX=600 '{split($0, a, ":"); if (length(a)==2) sec=a[1]*60+a[2]; else if (length(a)==3) sec=a[1]*3600+a[2]*60+a[3]; if (sec>MAX) print "Elapsed"; else print "Not Elapsed"}'

还要注意, ps -o etime -C ProgramName为您提供了自ProgramName运行以来的时间,因此您无需使用过于复杂的命令即可获得该时间。

重要提示:还请记住,对于已经运行了一天以上的进程,您将获得ps命令的输出,例如1-21:48:48 我的awk命令中没有涉及这种情况,但是您可以使用与上面显示的相同的awk's split命令。

更新:根据下面的注释,将此版本用于FreeBSD或-C ProgramName选项不可用的任何其他类型的Unix(例如Mac)。

ps -o etime=,command= | awk -v MAX=600 '/ProgramName/ && !/awk/ {split($1, a, ":"); if (length(a)==2) sec=a[1]*60+a[2]; else if (length(a)==3) sec=a[1]*3600+a[2]*60+a[3]; if (sec>MAX) print "Elapsed"; else print "Not Elapsed"}'

这是一种可能的方法:

for time in `ps auxwww  | awk '{print $10}'`; 
do  
SEC=`echo $time | cut -d":" -f2`; 
MIN=`echo $time | cut -d":" -f1`; 
TOTALTIMEINSEC=`echo $SEC+$MIN*60 | bc`; 
echo "the time in sec is:" $TOTALTIMEINSEC; done

顺便说一句,您不需要gerp -v grep,您可以执行以下操作:

grep [P]rogramName

就是说,我很想看看其他解决方案,因为我觉得自己正在回收这种方法...

首先,可以使用以下方法避免不必要的grep -v grep和awk跳舞:

$ ps -o time `pidof ProgramName`

在我的linux机器上,这似乎以HH:MM:SS格式给出时间。

考虑到pidof ProgName可能提供多个值,您可以使用tail -n +2|head -1或类似的值来处理。

现在获取持续时间,您可以将时间转换为秒:

$ seconds=$(printf "%d * 3600 + %d * 60 + %d\n" $(ps -o time $(pidof ProgramName)|tail -n +2|head -1|sed -e 's/:/ /g')|bc)

请注意, ps -o time time给出的ps -o time也可能采用以下格式: D-HH:MM:SS其中D是天数。

这将在您的程序运行少于一天的情况下起作用

THRESH=360
ps auxwww | grep [P]rocessname | awk '{print $10}' | sed -e 's/:/ /; s/\.[0-9]*$//' | while read m s; do 
  let total=${m}*60+${s}
  if [ $total -gt $THRESH ]; then 
    echo "${total} seconds total is over threshold of ${THRESH} seconds"
  fi
done

如果您想要更高的阈值,那么您将需要在处理时间的提取方面添加更多的逻辑,但是那时候我会将其放入perl / ruby​​脚本中并通过`ps auxww w `ps auxww获取信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM