カスタム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で実行してみましたが、ソケットについて多くのことがわかりました。
Sudo -u www-data
...パスワードの入力を求められるとハングします。 「スタートアップスクリプト」を実行するユーザーがsudoers権限を持っていることを確認しましたか?
私は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
し、ハングが止まるまで開始してみます。スクリプトを正しく取得したら、ファイルの名前を正しい名前に変更し、システムを再起動します。