在工作中有这样的需求:需要使用web页面展示项目组所有的测试环境的服务信息和状态,并且根据状态进行启动或停止。
后台的java实现是用ssh连接远端的服务器,ChannelExec 执行linux command. 但是实际操作中发现启动jar包的命令 :nohup java -jar /xxx.jar 执行后远端机器没有反应,参考资料加了重定向也不行。
后面尝试发现,其实是没有权限获取远端机器的环境变量,无法执行java命令,和nohup没有关系。
解决办法是 nohup /java的安装目录/bin/java -jar xxxx.jar
具体ssh的命令如下:
ssh -i /xxxx指定公钥地址 user@host “nohup /xxxjavahome/bin/java /xxxjarhome > /dev/null 2> &1 &”
/dev/null 2>&1 & 这个是nohup的人重定向,> /dev/null 意思是把日志输出到指定的/dev/null,/dev/null是linux机器都存在的目录,指定到这个目录的意思是不需要输出,也可以替换/dev/null为你想要的log文件。2>&1 意思是将标准错误2重定向到标准输出&1,标准输出再定向到/dev/null
如果java home目录不可知或者不便指定时,可以用如下命令:
ssh user@host <nohup java -jar xxxx.jar > EOF
注意这是三行命令噢



