2012-04-16 15 views
0

特定のプログラムが実行中かどうかを調べるシェルスクリプトを作成しようとしていますが、そうでない場合はサービスを再起動します。 また、インターフェイスがプロミスキャスモードであるかどうかをチェックします。そうでない場合は、そのモードにします。 PROG xyzが実行されている場合、私はそれが0を返す場合、progrmaはインタフェースかどうかを確認するために同様シェルスクリプトを使用しているプロセスの数をカウントする

を実行している他に、実行されていないコマンドライン

ps -ef | grep -v grep | grep xyz | wc -l 

上で次の操作を行うことができます確認するには

promiscモードです。コマンドラインで次のことができます。

ip link show eth0 | grep -i promisc | wc -l 

また、戻り値が1の場合、インターフェイスはプロミスモードです。

シェルスクリプトですべてバンドルしようとすると問題が発生します。最初のコマンドの出力を見ることができるように

#!/bin/bash 
SERVICE="daemonlogger" 
x=$(ps -ef|grep -v grep|grep $SERVICE|wc -l) 
if [ "$x" -eq 1 ]; then 
run=0 
else 
run=1 
fi 
IF_NAME="eth0" 
y=$(ip link show $IF_NAME|grep -i promisc|wc -l) 
if [ "$y" -eq 1 ]; then 
: 
else 
ifconfig $IF_NAME promisc up 
fi 
if [ "$run" -eq 1 ]; then 
service $SERVICE restart > /dev/NULL 2>&1 
fi 
echo $run 

コマンドの出力コマンドラインから実行する場合は、

[[email protected] Desktop]# ps -ef | grep -v grep | grep daemonlogger | wc -l 
0 
[[email protected] Desktop]# ip link show eth0 | grep -i promisc | wc -l 
0 

ここでは、デバッグモード

[[email protected] Desktop]# bash -x check_daemonlogger 
+ SERVICE=daemonlogger 
++ ps -ef 
++ wc -l 
++ grep daemonlogger 
++ grep -v grep 
+ x=2 
+ '[' 2 -eq 1 ']' 
+ run=1 
+ IF_NAME=eth0 
++ grep -i promisc 
++ ip link show eth0 
++ wc -l 
+ y=0 
+ '[' 0 -eq 1 ']' 
+ ifconfig eth0 promisc up 
+ '[' 1 -eq 1 ']' 
+ service daemonlogger restart 
+ echo 1 
1 

でそれを実行しているの出力ですさ2番目のコマンドの出力が正しい間に期待されるものではありません。

私はここで間違っていますか?

+1

コマンドラインで1つのプロセスしか処理できないと思っているようです。 –

+0

それは問題のポイントではありません。シェルスクリプトが2を返している間にコマンドラインが0を返すのはなぜですか?構文上の問題はありますか? – RedBaron

+3

あなたのスクリプトの名前を見てください...それは問題になるでしょう。 – Mat

答えて

2

ヒント:あなたのスクリプトは何と呼ばれていますか?

+0

Ohh RedBaron

1

答えは正確ではありませんが、コメントがたくさんあります。

  1. あなたはpidfileを使用してではなく、プロセスを追跡するには、ps、grepを、トイレなどに頼って検討すべきです。ファイルにpidを書き込み、それを使ってプロセスが実行中であるかどうかを確認します。あなたは、あなたの現在のアプローチですでにエラーに遭遇しました。

  2. なぜインターフェイスのステータスをチェックしますか?とにかくプロミスキャスモードに切り替えることはできませんか?私はこれで遊んでいないが、これは私に起こった最初のものです。

関連する問題