特定のプログラムが実行中かどうかを調べるシェルスクリプトを作成しようとしていますが、そうでない場合はサービスを再起動します。 また、インターフェイスがプロミスキャスモードであるかどうかをチェックします。そうでない場合は、そのモードにします。 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つのプロセスしか処理できないと思っているようです。 –
それは問題のポイントではありません。シェルスクリプトが2を返している間にコマンドラインが0を返すのはなぜですか?構文上の問題はありますか? – RedBaron
あなたのスクリプトの名前を見てください...それは問題になるでしょう。 – Mat