簡體   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