web-dev-qa-db-ja.com

Ubuntu Upstartスクリプトが開始と停止でハングする

カスタムjettyサーバーを起動するupstartスクリプトがあります。私がする時 Sudo start [myservice] 何も起こりません。続いて、Sudo status [myservice]次のように表示します:[myservice] start/killed, process 3586

/etc/init/[myservice].confのスクリプトは次のとおりです。

description "[description]"
author "[my name and email]"
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
    Sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
end-script

そして、こちらがgrafserv-start.sh

#!/bin/bash
/usr/bin/Java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar
echo "Done starting GrafServ"

スクリプトコマンドの出力をtmpログファイルにリダイレクトしようとしましたが、そのファイルは作成されません。開始すると、^ Cになるまでハングします。また、straceで実行してみましたが、ソケットについて多くのことがわかりました。

7
Simon Woodside
Sudo -u www-data

...パスワードの入力を求められるとハングします。 「スタートアップスクリプト」を実行するユーザーがsudoers権限を持っていることを確認しましたか?

2

私は3つの考えられる問題があると思います:

  • プログラムが実際にフォークしないため、expect forkは間違っています。スクリプトを使用しているため、これはおそらく当てはまりませんが、expect daemonを試してみるか、まったく期待しないことをお勧めします。

  • Javaプログラムは実際にはデーモンモードにならないため、バックグラウンドで実行する必要があります。つまり、最後に&が必要です:Sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1&

  • あなたのUpstartは悪い状態です。どのように発生するかは正確にはわかりませんが、スクリプトを修正して修正してもハングアップするような状態で起動できます。これが発生した場合は、ファイルの名前を変更します(つまり、/etc/init/[myservice]-1.confし、ハングが止まるまで開始してみます。スクリプトを正しく取得したら、ファイルの名前を正しい名前に変更し、システムを再起動します。

1
Adam Gent