Linux 上シェルスクリプト内でサービス(プロセス)が起動しているかどうかを確認する方法についての備忘録です。
プロセス確認でよく使用するのは ps aux
や top
コマンドですが、ps
コマンドに grep
コマンド等をパイプして起動中のプロセス数を取得し、その数で起動しているか停止しているかを判定します。(当方は、シェルスクリプト内でよく使用します)
0. 前提条件
- Linux Mint 14 (64bit) での作業を想定。
ps
(procps-ng
)のバージョンは 3.3.3 を想定。ps
コマンドは BSD 系 Unix のps
コマンドと似ているが若干異なる。
BSD 系 Unix 由来のオプションには-
を付与しないことに注意。
1. 方法・その1
1-1. コマンド
1
|
|
ps -ef
: 現在起動中のプロセスの一覧を出力。-e
: 全プロセスの情報を表示するオプション。(=-A
)-f
: ユーザごとのプロセス詳細情報を表示するオプション。
grep mysqld
: “mysqld” という文字列を含むものを抽出。grep -v grep
:ps -ef
の結果にはgrep mysqld
コマンドも含まれるので、それ("grep" 文字列にマッチする行)は除く。-v
: マッチしない行を検索結果として表示するオプション。
wc -l
: 行数を出力。-l
: 行数だけを出力するオプション。
1-2. 実行例
以下は、mysqld サーバ(プロセス)停止時の、コマンド実行例。
1 2 |
|
以下は、mysqld サーバ(プロセス)起動中の、コマンド実行例。
1 2 |
|
2. 方法・その2
2-1. コマンド
1
|
|
ps cax
: システム上の全てのプロセスを出力。c
: 実行コマンド名で表示するオプション。a
: ユーザーのプロセスを全て表示するオプション。x
: 制御端末のないプロセスの情報を表示するオプション。
grep mysqld
: “mysqld” という文字列を含むものを抽出。wc -l
: 行数を出力。-l
: 行数だけを出力するオプション。
2-2. 実行例
以下は、mysqld サーバ(プロセス)停止時の、コマンド実行例。
1 2 |
|
以下は、mysqld サーバ(プロセス)起動中の、コマンド実行例。
1 2 |
|
3. 応用
3-1. シェルスクリプト作成
以下のようなシェルスクリプトを作成してみる。(コマンド実行後、"0" が返る場合とそれ以外で場合分けできる例)
1 2 3 4 5 6 7 8 9 |
|
実行権限も付与しておく。
1
|
|
3.2. 実行例
以下は、mysqld サーバ(プロセス)停止時の、シェルスクリプト実行例。
1 2 |
|
以下は、mysqld サーバ(プロセス)起動中の、シェルスクリプト実行例。
1 2 |
|
簡単な例で説明しましたが、実際にはもっと有効に利用できます。
当方は MySQL サーバが起動していないと正常動作しないシェルスクリプトの中で、
- シェルスクリプト起動時に MySQL サーバが未起動なら、
MySQL サーバを起動し、
シェルスクリプト終了時に元に戻す(MySQL サーバを停止する)。 - シェルスクリプト起動時に MySQL サーバが既に起動中なら、
MySQL サーバの起動作業はせず、
シェルスクリプト終了時にも MySQL サーバを停止させない。
というような処理を実装しています。
以上。