シェルスクリプトを使用して起動する必要がある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を消費する可能性があります。小さな一時停止を導入すると、この特定の問題が大幅に解決されます。
答え2
Lasquezの答えはよく書かれ、広範囲です。それに応じて投票しました。
簡単に説明すると、
その場合は問題を解決する必要があります。
Windows CRをLinux / Unix LFに変換する方法はいくつかあります。以下はいくつかあります:
使用tr
:
tr -d '\r' < infile > outfile
使用sed
:
sed 's/^M$//' infile > outfile
最後に、Debianを使用しているので、dos2unix
availableというパッケージがあります。インストールしてみるととても簡単です。
dos2unix myfile