서비스에 의해 시작된 경우 명령이 실행되지 않습니다.

서비스에 의해 시작된 경우 명령이 실행되지 않습니다.

업데이트 기능을 갖춘 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 파일이 완전히 비어 있고 오류 메시지가 표시되지 않습니다. 재부팅되지 않습니다. 문제는 서비스의 일종의 사용자/액세스 제한이라고 생각합니다. 그러나 나는 이것을 완전히 이해할 만큼 리눅스를 잘 알지 못합니다. 나는 서비스에서 사용자를 설정하고 sudo그것을 사용함으로써 작동해야 한다고 생각합니다.

편집하다:한번만 바꿔 Type=simple보세요 Type=forking. 하지만 그 후에도 재부팅이 되지 않습니다.

관련 정보