![无法使用 ssh 运行 shell 脚本](https://linux22.com/image/162731/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20ssh%20%E8%BF%90%E8%A1%8C%20shell%20%E8%84%9A%E6%9C%AC.png)
我有一个启动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.jar
、startup.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