DebianでJavaプログラムが停止またはクラッシュした後に再実行するスクリプトを作成するにはどうすればよいですか?

DebianでJavaプログラムが停止またはクラッシュした後に再実行するスクリプトを作成するにはどうすればよいですか?

シェルスクリプトを使用して起動する必要があるJavaサーバープログラムを実行しています。 Javaプログラムがクラッシュまたは手動で停止した場合、スクリプトはJavaプログラムを再起動する必要があります。

このスクリプトをオンラインで見つけました。

while true
do
   java -jar program.jar
done

しかし、これは私のDebian 7コンピュータでは動作しないようです。

./start.sh: line 4: syntax error: unexpected end of file

これは「Linux」スクリプトとしてのみリリースされました。 Debianでどのように機能させることができますか?はい、スクリプトではなくコンソールにアクセスする方法がない限り、定期的にコンソールにアクセスする必要があるため、スクリプトからプログラムを起動することが重要です。

ベストアンサー1

これは完全に有効なスクリプトです。どこでもうまくいきます。構文エラーが発生した場合は、スクリプトをコピー/貼り付けるときに構文エラーが発生したか、Thomasがコメントから推測したようにファイルに無効な行終端を使用したためです。

od次のように、次のコマンドを使用して行終端を確認できます。

$ od -a foo.sh 
0000000   w   h   i   l   e  sp   t   r   u   e  nl   d   o  nl  sp  sp
0000020  sp   j   a   v   a  sp   -   j   a   r  sp   p   r   o   g   r
0000040   a   m   .   j   a   r  nl   d   o   n   e  nl
0000054

ここで、私のシステムのスクリプトが改行文字を使用していることがわかります(つまりnl、出力から後ろに)。t r u eキャリッジリターンのみが表示される場合:

0000000   w   h   i   l   e  sp   t   r   u   e  cr   d   o  cr  sp  sp

またはキャリッジリターン/ラインフィードの組み合わせ:

0000000   w   h   i   l   e  sp   t   r   u   e  cr  nl   d   o  cr  nl

その場合は問題を解決する必要があります。

sleepすべてがうまくいったら、次のようにスクリプトにコマンドを追加することをお勧めします。

while true
do
   java -jar program.jar
   sleep 1
done

一時停止のない緊密なループは、即座にクラッシュが発生した場合にprogram.jar多くのCPUを消費する可能性があります。小さな一時停止を導入すると、この特定の問題が大幅に解決されます。

おすすめ記事