Table of Contents
サーバのプロセスで、あるどこかの開発者がつくったんだけどそれが終了せずずっと動き続けているという経験は、誰しも遭遇したことがあるのではないでしょうか。 そんなときに使えるスクリプトです。 これを crontab などで定期的に実行させると、突如現れた終わらないプロセスを終了してくれます。 増産された Apache (httpd) の子プロセスを消すスクリプト, プロセスの実行ディレクトリをリストアップするに似たスクリプトです。
コード
AWS EC2 Amazon Linux のサーバ上で動かしました。
内容
for
これで プロセスID をイテレートします。
target_name
のところにフィルタしたい条件文字列を入れて目的のプロセスを見つけ出します。
set line
pid と etimes を出力し、 該当の pid についての行を取得します。
set duration
ps
の結果から 実行時間を取得します。
取得できる実行時間の単位は秒です。
-z $duration
プロセスがなくなっている時もあるので、そのときは次のイテレーションに進みます。
$duration -ge 345600
345,600秒(4日間)以上動いている処理だったら終了します。
sudo kill $pid
でプロセスを終了させています。