Hatena::Grouptwitterircgateway

swirhenのはうはう

2009-07-15

TIGのCPU使用率が突然爆発して戻らなくなるのでなんとかした

18:09

特にアラートメールとか出す設定に自宅鯖はしてないので、たまにtopするとmonoが200%とかに張り付いたまま数時間を経過するなどしており危険。

というわけで、x分おきにcpu使用率を監視してy%を越えた状態が続いたら再起動をかけるシェルスクリプトを書いてみた。

cpuchk.sh

#!/bin/sh
WAKE=$1    # プロセスもしくはコマンドの名前 ex)TwitterircgatewayCLI
NAME=$2    # 再起動するシェル ex)/home/swirhen/tigkw.sh ※標準出力は捨てること
BORDER=$3            # CPUしきい値
ROOT=/home/swirhen/  # ファイルを作るディレクトリ
CPU=$ROOT$NAME.cpu   # CPU使用率を記録しておくファイル
if [ $# -eq 3 ]; then
  #PID=`ps -eo pid,comm,cmd | grep $NAME | grep -v grep | grep -v $0 | sed "s/^\s*//" | cut -d" " -f1` #;echo $PID
  #PID=`echo $PID | cut -d" " -f1` ;echo $PID #2個以上見つかった場合は1個目で決めうち対処。泥臭い...
  PID=`pgrep -f -o  $NAME` ;echo $PID
  # 上がってなければ上げ直す
  if [ ${PID:-null} = null ] ; then
    $WAKE;exit
  fi
  NOW=`top -n 1 -b | egrep "^\s*$PID" | awk '{print $9}'` ;echo $NOW
  if [ -f $CPU ] ; then
    OLD=`cat $CPU` ;echo $OLD
    # CPU使用率が連続でしきい値を越えていた場合、上げ直す
    if [ `expr $OLD` -gt $BORDER -a `expr $NOW` -gt $BORDER ] ; then
      $WAKE;exit
    else
      echo $NOW > $CPU # 現在の値に書き換える
    fi
  else
    echo $NOW > $CPU # 上がってるけどファイルが存在してなかった場合
  fi
fi

$ ./cpuchk.sh /home/swirhen/sh/tigkw.sh TwitterIrcGatewayCLI 100

などというようにつかう。これをcronで5分おきぐらいに実行。

# m h  dom mon dow   command
*/5 * * * * /home/swirhen/sh/cpuchk.sh /home/swirhen/sh/tigwake.sh TwitterIrcGatewayCLI 100

tigwake.sh

/home/swirhen/TIG/TwitterIrcGateway --(略) >/dev/null 2>&1 &
echo "TIG restarted at "`date` > /home/swirhen/tig.restart

cronでシェル実行する場合標準出力があると死ぬみたいなので/dev/nullしておこうね。うちだけかなあ。

超泥臭いのでもっとスマートにやる方法あったら教えて下さい

#7/17追記 pid取得のところにバグあったので直した。冗長すぎる...pgrep使いたいけどどうにかならんもんか...

あとpcpuで取れる値がtopだと100%張り付きなのに31.0とかになってて残念。計算方法が違うのかな...

#10/23追記 CPU使用率取得をtop -n 1にしてみた。

h_kenanh_kenan 2009/07/16 11:17 PIDとるところは
pgrep -f TwitterIrcGatewayCLIとかやるといいんじゃないかな。

swirhenswirhen 2009/07/16 17:58 よくかんがえたらそれでよかった
なおす

swirhenswirhen 2009/07/16 18:16 と思ったんだけどpgrepではこのシェル自身も引っかかる
どうしたもんか

AnatolyAnatoly 2013/03/03 16:44 That's the tihnnkig of a creative mind

fnaxjtlfnaxjtl 2013/03/06 11:00 VGKAEa <a href="http://hqplokvqwdfr.com/">hqplokvqwdfr</a>

avlxieavlxie 2013/03/08 07:41 TfeO0u , [url=http://qhljdzxlgfnl.com/]qhljdzxlgfnl[/url], [link=http://oauwvoxjuvmv.com/]oauwvoxjuvmv[/link], http://yqahkmcuqpvr.com/

ゲスト



トラックバック - http://twitterircgateway.g.hatena.ne.jp/swirhen/20090715