更新
我发现它使用的 jdk 路径是错误的。eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found
应该Java
是小写的java
,这是怎么回事?当我直接在服务器上运行此脚本时,一切正常。
我正在尝试通过远程客户端启动或关闭 tomcat。
在我的服务器上,我有 3 个不同的 tomcat:tomcat1、tomcat2 和 tomcat3。
首先,我尝试tomcat_path/bin/shutdown.sh
通过 ssh 运行来停止它,命令是
ssh [email protected] "cd /home/jake/tomcat2/bin;exec bash ./shutdown.sh"
"
和都'
试过了,但是不起作用,输出是
eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found
看来 shell 脚本在我的本地客户端上运行,因为服务器上有这个文件。
有没有什么办法可以正确运行远程服务器上的 shell 脚本?
更新
我已经跑了
ssh [email protected] "sh -x /home/jake/tomcat/bin/shutdown.sh > /home/jake/tomcat.log 2>&1"
tomcat.log 中的输出是:
+ PRG=/home/jake/tomcat/bin/shutdown.sh
+ [ -h /home/jake/tomcat/bin/shutdown.sh ]
+ dirname /home/jake/tomcat/bin/shutdown.sh
+ PRGDIR=/home/jake/tomcat/bin
+ EXECUTABLE=catalina.sh
+ [ ! -x /home/jake/tomcat/bin/catalina.sh ]
+ exec /home/jake/tomcat/bin/catalina.sh stop
eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found
答案1
我发现它使用的 jdk 路径是错误的。eval: 1:
/opt/Java/jdk1.6.0_25/jre/bin/java
: not found Java 应该是小写的 java,这是怎么回事?当我直接在服务器上运行此脚本时,一切正常。
因为你在某处设置了错误的环境变量(可能是~/.bashrc
)。bash 根据不同的 shell 类型读取不同的启动文件。请记住:
ssh user@host 'command'
是一个非交互式 shell- 而
ssh user@host
运行命令是一个交互式 shell。
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
答案2
看起来好像没有设置一个奇怪的环境变量。为了好玩...尝试找到“/opt/Java”的任何实例...一种“简单”的方法是
find /etc -type f |grep -v ' ' | xargs grep /opt/Java
这可能表明您的系统上的配置文件有问题。
还可能存在一种奇怪(非常奇怪)的情况……您有一个奇怪的 ssh 配置,允许客户端环境变量在服务器上传递(和设置)。[罕见的情况……但理论上是可能的]