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