通过ssh启动和closurestomcat

更新

我发现它使用的jdk的path是错误的。 eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found Java应该是小写的java ,那是怎么发生的? 当我直接在服务器上运行这个脚本时,它就好了。


我试图通过远程客户端启动或closurestomcat

在我的服务器上,我有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 

我发现它使用的jdk的path是错误的。 eval:1: /opt/Java/jdk1.6.0_25/jre/bin/java :找不到Java应该是小写的java,那是怎么发生的? 当我直接在服务器上运行这个脚本时,这只是没关系。

因为你在某处设置了错误的环境variables(可能是~/.bashrc )。 bash根据不同的shelltypes读取不同的启动文件。 请记住:

  • ssh user@host 'command'是一个非交互式的shell
  • ssh user@host并运行该命令是一个交互式shell。

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

它看起来像一个奇怪的envvariables没有被设置。 为了好玩…尝试find“/ opt / Java”的任何实例…一个“简单”的方法来做到这一点

 find /etc -type f |grep -v ' ' | xargs grep /opt/Java 

这可能会指向您的系统上的一个错误的configuration文件。

也可能有一个奇怪的(非常奇怪)的机会…你有一个奇怪的SSHconfiguration,它允许客户端envvariables被传递(和设置)在服务器上。 [稀有情况,但在理论上是可能的]