サービスによって開始された場合、コマンドは実行されません。

サービスによって開始された場合、コマンドは実行されません。

アップデート機能を備えた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。しかし、その後も再起動しません。

関連情報