无法使用 ssh 运行 shell 脚本

无法使用 ssh 运行 shell 脚本

我有一个启动java应用程序的脚本

如下文件startup.sh的名称

#!/bin/bash
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

并且它已获得许可

-rwxrwxr-x 1 root root        41 Oct 22 20:58 shutdown.sh
-rwxrwxr-x 1 root root       144 Oct 22 20:58 startup.sh

如果我在机器中运行相同的脚本我将运行

但是如果我从其他机器运行(詹金斯工作)

ssh [email protected] '/opt/app/startup.sh'

它没有运行,或者没有启动罐子

更新1

是的,其他命令正在运行

ssh [email protected] 'cd /home; ls -la'   
total 8
drwxr-xr-x  2 root root 4096 Jun 27  2017 .
drwxr-xr-x 22 root root 4096 May  2 12:06 ..

更新2 设置PATH和JAVA_HOME

# echo $JAVA_HOME
/usr/java/jdk1.8.0_181-amd64

# echo $PATH
/usr/java/jdk1.8.0_181-amd64/bin:/usr/java/jdk1.8.0_181-amd64/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

答案1

ssh [email protected] '/opt/app/startup.sh'
...
#!/bin/bash
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

当您startup.sh以这种方式运行时,进程的工作目录(在远程系统上)将是 root 用户的主目录。该目录可能是“/”或“/root”或类似的东西。您的脚本不包含任何cd命令,因此它将尝试访问根目录的主目录中的app.jarstartup.log、 和。 root 的主目录中app.pid可能没有指定的文件app.jar,因此 java 命令无法执行任何操作。

如果您想访问 中的所有这些文件/opt/app,那么您应该更改到远程系统上的该目录:

ssh [email protected] 'cd /opt/app && /opt/app/startup.sh'

或者,您可以更改为脚本内的正确目录:

#!/bin/bash
cd /opt/app || exit 1
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

相关内容