- PR -

シェルファイルでのサービス起動確認について

1
投稿者投稿内容
MACHIKO
会議室デビュー日: 2008/04/02
投稿数: 14
投稿日時: 2008-04-08 01:02
いつもありがとうございます。

これまでRHEL3上で、サービス起動状況を確認し停止している場合は
起動させるというシェルファイルを使っていたのですが、
OSをRHEL5にしたところ、サービスの起動状況が正しく判定できなくなってしまいました。

できれば、OS別にシェルファイルを分けずに同じシェルファイルで
対処したいのですが、もとのシェルファイルを作っていただいたときに、
私自身がその内容をきちんと理解をしていなかったため、
どこをどう修正すればよいのか困っています。

恐縮ですが、適切な修正方法等をご教授いただければ幸いです。



isAlive=`ps -ef | grep httpd | grep -v grep | wc -l`
if [ $[isAlive] = 0 ]; then
/etc/init.d/httpd start
fi





[ メッセージ編集済み 編集者: MACHIKO 編集日時 2008-04-08 01:14 ]
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2008-04-08 05:57
RHEL 3 と 5 の違いが具体的に手許で比較できる状況ではないので推測です(_ _)

おそらく ps -ef の出力形式が異なっているのではないでしょうか。
釈迦に説法かもしれませんが、シェルスクリプトの内容は以下のような意味です。

・isAlive=`...` の中身
(1) ps -ef : 現在起動しているプロセスの一覧を出力する
(2) grep httpd : その中で httpd という文字列を含むものだけを取り出す
(3) grep -v grep : (1) の結果には (2) のコマンドが含まれるので、それは除く
(4) wc -l : 以上の結果が何行あったかを調べる

これで、httpd デーモンが起動されている数が isAlive 変数に入ります。
その次の if...fi 文で、httpd デーモンが起動されていなければ /etc/init.d/httpd start を実行して同デーモンを起動する(起動済みならば何もしない)という処理ですね。

RHEL 3 と 5 で ps -ef の出力内容の違いを調べて対応するのが一番正確ですが、-f よりも情報量の多い出力指定は -l なので、もしかすると ps -el とすると RHEL 3 と RHEL 5 の両方で動作するかもしれません。

ご参考になれば幸いです。

[ メッセージ編集済み 編集者: Gio 編集日時 2008-04-08 06:02 ]
zume
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 93
投稿日時: 2008-04-08 09:05
シェルスクリプトそのものに実行権が付与されてないなんて
事はないですよね?
ピザ男
会議室デビュー日: 2007/09/20
投稿数: 3
投稿日時: 2008-04-09 09:54
RHELは触ってないのでわからないのですが肝心の
ps -ef | grep httpd | grep -v grep | wc -l
の出力は確認しましたか?

もし期待通りの結果が得られない(常に0とか)のなら
httpdがapacheやapache2になってたりしません?

あと、蛇足ですが
ps -ef | grep [h]ttpd -c
でも良いはずです。
MACHIKO
会議室デビュー日: 2008/04/02
投稿数: 14
投稿日時: 2008-04-09 10:19
Gioさん、zumeさん、ピザ男さん

ありがとうございます。
画面上から入力すると正しい値が返ってきていました。
シェルファイルの実行権限も問題ありませんでした。

同じコマンドをコピーして、iptablesの確認もしたかったのですが、
そちらは"0"が返されてしまいます。
iptablesは確認できないものなのでしょうか?

kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2008-04-09 11:52
こんにちは.
引用:

MACHIKOさんの書き込み (2008-04-09 10:19) より:

同じコマンドをコピーして、iptablesの確認もしたかったのですが、
そちらは"0"が返されてしまいます。
iptablesは確認できないものなのでしょうか?


iptables は特定の daemon が動いているわけではないので
「同じ command」では確認できないと思います.
iptables -L で Netfilter の status が確認できると思います.

ちなみに「httpd が起動しているか判定できない」のでしょうか?
httpd が起動していない場合にくだんの shell script で
httpd を起動できないのではなく?
確認してないので間違っているかもしれませんが,
/etc/init.d/httpd start
って RHEL5 では path は正しいのでしょうか?
※基本的に service httpd start しているので...
MACHIKO
会議室デビュー日: 2008/04/02
投稿数: 14
投稿日時: 2008-04-14 13:43
Kazさん

報告が遅くなり大変失礼いたしました。

引用:

iptables は特定の daemon が動いているわけではないので
「同じ command」では確認できないと思います.
iptables -L で Netfilter の status が確認できると思います.
に service httpd start しているので...



なるほど、了解です。
いろいろなサービスで確認してみたのですが、同じコマンドで確認できない
サービスもたくさんありました。

特定のdaemonが動いていないサービスも、シェルでサービスの状態確認が
できれば嬉しいのですが、そのあたりはもう少し勉強してみて
それでどうしてもだめなら、改めてまた皆さんに教えを請うようにします。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)