[Command] 大量の起動しているタスクを条件で一括停止(kill)する方法

とある会社で開発した業務システムがある日何らかのシステム不具合でサーバー負荷が膨大になっていた。 調べてみたところ、daily.shというデイリーバッチが、3万タスクも起動していたことがわかった。 1回の起動でまあまあなSQLアクセスを行い、計算処理をしてから、データベース書き込みをするので、 サーバー負荷が膨大になっていたようだ。 なんで大量起動したのかは現在調査中。 とりあえず、起動しているタスクを一括削除する必要があるので、その時のコマンドの備忘録

タスクの確認

ps aux | grep daily.sh

daily.shというバッチファイルを一括で停止する

pgrep -f "daily.sh$" | xargs kill -9

解説

pgrepは、タスクを条件検索して、プロセスIDを取得するコマンド。 -f オプションは、実行されているコマンドラインの全てを検索対象にする。 xargsは、取得したプロセスID一覧を順番に処理する便利コマンド