通常のサービスと同様に、状態を開始、停止、および確認する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" ];
これにより、実行中のインスタンスが存在しないときにiperf
ifが失敗し、必要なステータスメッセージが表示されます。現在作成されているとおり、iperf
プロセスが正確に1つある場合にのみ実行されないことを報告します。