通过 ssh 启动和关闭 tomcat

通过 ssh 启动和关闭 tomcat

更新

我发现它使用的 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 配置,允许客户端环境变量在服务器上传递(和设置)。[罕见的情况……但理论上是可能的]

相关内容