Shell: 長く実行されているプロセスを消す


サーバのプロセスで、あるどこかの開発者がつくったんだけどそれが終了せずずっと動き続けているという経験は、誰しも遭遇したことがあるのではないでしょうか。 そんなときに使えるスクリプトです。 これを 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 でプロセスを終了させています。