Javaスクリプトのシステムサービスは作業フォルダで実行する必要があります。

Javaスクリプトのシステムサービスは作業フォルダで実行する必要があります。

次のように、JJSコマンドラインスクリプトファイルを使用して起動されたUbuntu 20.04サーバーにJavaアプリケーションをインストールしました。

#!../lib/bin/jre/bin/jjs -scripting function myJAVA(c){ bala bala bala ......}

通常、このアプリケーションを実行するには、次の手順2を実行する必要があります。

# cd /my_app_path/MsgPro/bin
# ./myJAVA start

明らかにbinフォルダに移動し、そこからスクリプトを実行する必要があります。それ以外の場合(別のフォルダで実行している場合)、次のエラーが発生します。

bash: ./bin/msgProcessor: ../lib/bin/jre/bin/jjs: bad interpreter: No such file or directory

私はJavaについてはまったくわかりませんが、systemctlを介してmyJAVA.serviceを生成するように求められました。これにより、サーバーが再起動または予期せず終了した場合、アプリケーションは自動的に再起動します。

/etc/system/systemd/myJAVA.serviceにこれを実行できる単位ファイルがあることを知っていますが、どのように機能させるかはわかりません。以下は私の単位ファイルです。

[Unit]
Description=myJAVA Daemon
After=network-online.target

[Service]
User=root

Environment=PATH=/bin:/sbin:/usr/bin:/usr/sbin
ExecStart=/my_app_path/MsgPro/bin/myJAVA start

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

私のExecStartまたは環境が間違っているようですが、正しいことが何であるかわかりません。

どんな助けでもいただければ幸いです。

答え1

スクリプトの最初の行を設定します。

#!../lib/bin/jre/bin/jjs

相対パスではなく絶対パスです(インタプリタの場合)。
ただプログラムを実行するには、スクリプトを次のようにします。

....../lib/bin/jre/bin/jjs -scripting function myJAVA(c){ bala bala bala ......}

プログラムの絶対パスをリセットする

答え2

  1. WorkingDirectory=を使用してシミュレーションできますcd <path> && ./script
  2. WorkingDirectory=通常、書き込み位置(適用されない)を指定しない限り、これは必要ありませんbin。絶対パスまたは環境変数への相対パスを使用するようにスクリプトを変更できる場合は、通常、これらの問題を多く解決できます。
  3. 通常、設定は不要です$PATH。 systemd 単位で絶対パスを使用します。シェルスクリプトを実行すると、スクリプトはPATH通常.bashrc
  4. あなたは必要ありませんUser=root。これはすでに systemd サービスバスに暗示されています。

このサービスはあなたに適しています。

[Unit]
Description=myJAVA Daemon
After=network-online.target

[Service]
WorkingDirectory=/my_app_path/MsgPro/bin
ExecStart=/my_app_path/MsgPro/bin/myJAVA start

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  • あなたは正しい道を行っていますExecStart=/absolute/path。これにより、スクリプトが確実に実行されます。
  • WorkingDirectory=スクリプトでbin()に関連するエントリを見つけることができます../lib/bin/jre/bin/jjs

関連情報