shell脚本中ssh命令远程调用java启动脚本无法启动java进程

Posted 射手Mr吴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中ssh命令远程调用java启动脚本无法启动java进程相关的知识,希望对你有一定的参考价值。

以Elasticsearch为例

一、问题概述

shell脚本中ssh命令远程调用Elasticsearch启动脚本无法启动Elasticsearch进程

二、现象描述

​批量搭建好ES服务后,远程批量启动ES服务,命令如下:

for ip in ​​cat ip.txt​​;do echo $ip;ssh esuser@$ip "sh /opt/elasticsearch/bin/elasticsearch -d";done

命令执行成功,但是机器上ES进程没启动

三、问题跟踪及分析

首先使用 sh  -x 脚本名 执行脚本,观察发现ssh调用Elasticsearch启动脚本的命令确实执行了,排查命令语法错误的可能;接着登录等对应的服务器上单独执行 Elasticsearch启动脚本,可以正常启动,说明Elasticsearch启动脚本没有问题;联想到Elasticsearch是java程序,启动过程需要加载JDK的环境变量,而JDK配置在了~/.bash_profile或者 /etc/profile文件 中,而在发布机上执行脚本 bash未加载远程的环境变量,所以未能正确启动Elasticsearch

四、解决方案

在远程命令中 ssh命令处修改加上 bash -l

for ip in ​​cat ip.txt​​;do echo $ip;ssh esuser@$ip "bash -l /opt/elasticsearch/bin/elasticsearch -d";done

​man bash可以知道 -l 参数的功能:   Make bash act as if it had been invoked as a login shell


以上是关于shell脚本中ssh命令远程调用java启动脚本无法启动java进程的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中怎么ssh上远程机执行命令

本地shell脚本中ssh到远程服务器并执行命令

大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本

利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集

利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集

Java SSH远程执行Shell命令shell脚本实现(Ganymed SSH)