如果由服务启动,命令不会被执行

如果由服务启动,命令不会被执行

我有一个带有更新功能的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=simpleType=forking可以了。但之后仍然没有重新启动。

相关内容