スクリプトはサービスの状態を正しく報告しません。

スクリプトはサービスの状態を正しく報告しません。

通常のサービスと同様に、状態を開始、停止、および確認するiperf用のスクリプトがあります。 「service iperf start」または「service iperf stop」を実行すると正常に動作します。 「service iperf status」を実行しようとすると、実行中でない場合でも常に実行中として返されます。

実行時間:

#service iperf status
/usr/bin/iperf pid 37567 is running!!!

実行していない場合:

# service iperf status
/usr/bin/iperf pid is running!!

私のスクリプト全体は次のとおりです。

#!/bin/bash

# chkconfig: - 50 50
# description: iperf

DAEMON=/usr/bin/iperf
service=iperf
info=$(pidof /usr/bin/iperf)
is_running=`ps aux | grep -v grep | grep iperf | wc -l | awk '{print $1}'`

case "$1" in
      start)
              $DAEMON -s -D
              ;;
      stop)
              pidof $DAEMON | xargs kill -9
              ;;
      status)

             if [ $is_running != "1" ];
             then
                echo $DAEMON pid $info is running!!!
              else
                echo $DAEMON is NOT running!!!
              fi
              ;;
      restart)
              $DAEMON stop
              $DAEMON start
              ;;
      *)
              echo "Usage: $0 {start|stop|status|restart}"
              exit 1
              ;;
esac

スクリプトのステータスセクションの最初のエコーステートメントを読み取れないようです。正しい出力が得られていることを確認するために、コマンドラインのスクリプトの外部でpsコマンドを実行しました。サービスが実行されている場合は、スクリプトチェックに応じて「1」が返されます。実行していない場合は「0」を返すので、次のechoステートメントを実行し続ける必要がありますが、そうではありません。誰でもこの問題を解決する方法を教えてもらえますか?

RHEL 6.7 bashバージョン4.1.2を使用しています。

ベストアンサー1

私の考えでは、あなたはルートを変更したいと思います。

if [ $is_running != "1" ];

~になる

if [ "$is_running" != "0" ];

これにより、実行中のインスタンスが存在しないときにiperfifが失敗し、必要なステータスメッセージが表示されます。現在作成されているとおり、iperfプロセスが正確に1つある場合にのみ実行されないことを報告します。

おすすめ記事