2016-05-19 11 views
1

カスタムサーバーアプリケーションを起動/停止/再起動するスクリプトを作成します。デーモン・サーバを起動するときシェルスクリプトの関数が正しく実行されない

それは次のことを行う必要があります

#!/bin/sh -e 
### BEGIN INIT INFO 
... 
... 
### END INIT INFO 

# Start service 
pga_server_start() 
{ 
     /opt/pga/server/server -d 
} 


# Stop service 
pga_server_stop() 
{ 
     PID=`cat /var/lock/pga_server.lock` 
     /bin/kill --signal SIGTERM $PID 
} 

pga_load_excalibur() 
{ 
     is_loaded=`lsmod | grep excalbr` 
     echo "Done" 


     if [ -z "$is_loaded" ]; then 
       /usr/local/bin/excload 
       echo "Driver excalibur loaded." 
     else 
       echo "Driver excalibur already loaded." 
     fi 
} 

case "$1" in 
     start) 
     pga_load_excalibur 
     pga_server_start 
     ;; 
... 
... 

はで初期状態それがうまく働きました。次に、pga_load_excalibur関数を追加しました。 その後、もう動作しません。 関数pga_load_excaliburからは決して戻りません。 is_loaded= lsmodに電話がかかっているようです。 grep excalbr never returns as the subsequent echo`は決して印刷されません。

しかし、この機能を別のシェルスクリプトにコピー/ペーストすると...機能します。

しかし、私は手動でこの方法を始動スクリプトを起動した場合:

は、それが動作しません

を開始 または サービスサーバを起動し/etc/init.d/server。 私はDebian Wheezy 7.9 x64を使用しています。

私はschellスクリプトではありませんが、正しく見えます。このサービススタータースクリプトに埋め込まれているときになぜ機能しないのか分かりません。

は私もとgrepのラインを交換しようとしたことに注意してください:

is_loaded=$(lsmod | grep excalbr) 

しかし、それはどちらか動作しません。 私はアイデアを実行しているよ:(

Z.

答えて

1

デバッグモードでスクリプトを実行した場合、あなたは何を得るかでそれを実行しよう:?

かもしれ

#!/bin/sh -xv

あなたがそれを理解できない場合、出力を投稿してください。

+0

良いアイデア!私はそれについて考えなかった、明日の朝にそれを試してみて、あなたに知らせてください。 – Zyend

+0

まあ...あなたのコードヘッダーを変更しました: #!/ bin/sh -xv すべて正常に動作します。 #!bin/sh -eを使うのは良い解決策ではないようです。 -eは、コマンドが失敗した場合にスクリプトがただちに終了することを意味します。私はまだコマンドの何が問題なのか理解していません。 is_loaded = 'lsmod | grep excalbr' 最後に、-xvを削除し、ヘッダーに#!/ bin/shを付けるだけでした。 私は100%ではありませんが、少なくともスクリプトは機能します。 – Zyend

+0

-xvからデバッグ情報を送信してください。 – Faizers

関連する問題