カスタムサーバーアプリケーションを起動/停止/再起動するスクリプトを作成します。デーモン・サーバを起動するときシェルスクリプトの関数が正しく実行されない
それは次のことを行う必要があります
#!/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.
良いアイデア!私はそれについて考えなかった、明日の朝にそれを試してみて、あなたに知らせてください。 – Zyend
まあ...あなたのコードヘッダーを変更しました: #!/ bin/sh -xv すべて正常に動作します。 #!bin/sh -eを使うのは良い解決策ではないようです。 -eは、コマンドが失敗した場合にスクリプトがただちに終了することを意味します。私はまだコマンドの何が問題なのか理解していません。 is_loaded = 'lsmod | grep excalbr' 最後に、-xvを削除し、ヘッダーに#!/ bin/shを付けるだけでした。 私は100%ではありませんが、少なくともスクリプトは機能します。 – Zyend
-xvからデバッグ情報を送信してください。 – Faizers