非淡泊无以明志,非宁静无以致远。这篇文章主要讲述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进程】
推荐阅读
- 搭建npm的私有verdaccio 仓库
- 运维面试问道 网站出现502 如何排查
- linux 搭建ELFK6.8.0集群
- MySQL8中的函数索引
- 个人日常行为准则2022.01.28
- filebeat收集json日志
- zookeeper安装配置集群
- Windows RDP远程桌面 提示出现身份验证错误 要求的函数不受支持 解决方法
- Centos7.9搭建rabbitmq+haproxy+keepalived高可用集群