Solaris で暴走プロセスを KILL するウォッチャスクリプトを作るには
CPU リソースを食いつぶすプロセスがあったら、KILL する監視用スクリプトを書いてみる。
Linux だと top が有名だが、Solaris では標準ではない。prstat を使う。prstat を単に実行して標準出力するには
$ prstat -c 1 1
とすればよい。後はターゲットプロセス名で grep して awk で cpu 使用率を取り出して合計値が閾値を超えたら、プロセスを KILL -KILL するようにする。
引数: 対象プロセス名(grep してるだけなので不十分) 暴走したとみなすしきい値
#!/bin/bash target=$1 threshold=$2 exp=0 for u in `prstat -c 1 1 | grep $target | awk '{print $9}' | sed -e "s/%$//"` do exp="${exp}+${u}" done cpu=`echo "s=${exp}; s/1" | bc` if [ $cpu -lt $threshold ] then echo "no driving $target. (cpu usage: $cpu%)" exit 0 fi ps -ef | grep $target | awk '{print $2}' | xargs kill -KILL echo "killed driving $target. (cpu usage: $cpu%)"
※bc で実数の計算をしているが、scale=0; としても小数値が帰ってしまうので s/1 とした。