从java代码运行Linux服务导致服务:未找到命令

从java代码运行Linux服务导致服务:未找到命令,java,linux,bash,shell,Java,Linux,Bash,Shell,我想从我的Java代码运行Linux服务。我尝试了很多方法。甚至编写执行服务启动的.sh脚本,但我一直遇到以下错误: /opt/scripts/service-stop.sh:第3行:未找到服务:命令 这是我的.sh脚本 echo "Service name: $1" echo "Start args: $2" service $1 start $2 Java代码: private void executeCommandAndWait(String... args) { Process

我想从我的Java代码运行Linux服务。我尝试了很多方法。甚至编写执行服务启动的.sh脚本,但我一直遇到以下错误: /opt/scripts/service-stop.sh:第3行:未找到服务:命令

这是我的.sh脚本

echo "Service name: $1"
echo "Start args: $2"
service $1 start $2
Java代码:

private void executeCommandAndWait(String... args) {
    ProcessBuilder pb= new ProcessBuilder().command(args);
    Process proc = pb.start();
}

        executeCommandAndWait("/bin/bash", "-c", "/opt/scripts/service-start.sh", srvName, "some-arg");

“服务”是一个系统调用,需要由sudo用户运行。我猜它不在Java进程/用户的路径中。您可以使用它的完整路径:

/$PATH_TO_SERVICE/service $1 start $2

在bash脚本中尝试
systemctl

我不确定如何将args传递给它(可能会有所帮助),但基本的方法是:

systemctl start <service>
systemctl启动

sudo系统控制启动
Arch wiki有一些功能:)

sudo systemctl start <service>