アップデート機能を備えたJavaプログラムがあります。この関数は単にjarを起動してから自分で停止します。更新機能をテストするためにプログラムを手動で実行すると、正常に動作します。しかし、サービスとしてプログラムを起動すると、そうではありません。これはサービスです:
[Unit]
Description=Starts the Main Java Programm
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash /usr/sbin/start.sh
TimeoutStartSec=0
User=USERNAME
[Install]
WantedBy=default.target
以下はstart.shです(プログラムは自動的に再起動されません)。
#!/bin/bash
cd /home/USERNAME/bin/java
echo 'PASSWORD' | sudo -S java -jar variobox.jar > output.txt 2> error.txt
プログラムを手動で呼び出す方法(プログラムが正しく再起動される方法):
echo 'PASSWORD' | sudo -S java -jar variobox.jar > output.txt 2> error.txt &
以下は、Javaプログラムが独自に更新される方法です。
ProcessBuilder builder = new ProcessBuilder("java", "-jar", "variobox.jar");
builder.redirectOutput(new File("output.txt"));
builder.redirectError(new File ("error.txt"));
builder.start();
プログラムが再起動された後、2つのtxtファイルが完全に空になり、エラーメッセージは表示されません。再起動しません。問題は、サービスの一種のユーザー/アクセス制限だと思います。しかし、私はこれを完全に理解するのに十分なLinuxを知りません。私はサービスでユーザーを設定し、sudo
それを使用することで動作する必要があると思います。
編集する:一度だけ変更しType=simple
てみてくださいType=forking
。しかし、その後も再起動しません。