Обновлено
Я обнаружил, что путь jdk, который он использует, неправильный. eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found
то Java
должен быть в нижнем регистре java
, как это случилось? Когда я запускаю этот скрипт прямо на сервере, это нормально.
Я пытаюсь запустить или выключить Tomcat через удаленный клиент.
На моем сервере у меня есть 3 разных кота: tomcat1, tomcat2 и tomcat3.
Во-первых, я пробовал бежать tomcat_path/bin/shutdown.sh
чтобы остановить его через ssh, и команда
ssh jake@1xx.3x.2x.1xx "cd /home/jake/tomcat2/bin;exec bash ./shutdown.sh"
обе "
и '
пробовали, но не работают, вывод
eval: 1: /opt/Java/jdk1.6.0_25/jre/bin/java: not found
похоже, что сценарий оболочки работает на моем локальном клиенте, потому что на сервере он имеет этот файл.
Есть ли способ правильно запустить сценарий оболочки на удаленном сервере?
обновлено
Я бегал
ssh jake@1xx.xx.25.100 "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, который он использует, неправильный. eval: 1:
/opt/Java/jdk1.6.0_25/jre/bin/java
: не найдено, Java должна быть в нижнем регистре java, как это случилось? Когда я запускаю этот скрипт прямо на сервере, это нормально.
Поскольку вы где-то установили неправильные переменные среды (может быть ~/.bashrc
). bash читает разные файлы запуска в зависимости от типа оболочки. Имейте в виду, что:
ssh user@host 'command'
это неинтерактивная оболочкаssh user@host
и запускаем команду в интерактивной оболочке.http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
Похоже, что не установлена странная переменная env. Ради интереса ... попробуйте найти любой экземпляр "/ opt / Java" ... "простой" способ сделать это -
find /etc -type f |grep -v ' ' | xargs grep /opt/Java
Это может указывать на плохой файл конфигурации в вашей системе.
Также может быть странный (очень странный) шанс ... что у вас есть странная конфигурация ssh, которая позволяет передавать (и устанавливать) клиентские переменные env на сервер. [Редкая ситуация ... но теоретически возможна]