【在shell脚本里面使用ssh远程操作时,出现找不到环境变量的问题】

今天搞了一个shell脚本来快速启动zookeeper

我使用的环境是在:

  • centos-7
  • zookeeper3-5-7
  • jdk-1.8_212

问题描述

使用脚本来start zookeeper,结果出现JAVA_HOME未找到
在这里插入图片描述
zk.sh是我的脚本,底下是里面的脚本内容

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        for i in master slave1 slave2
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper/bin/zkServer.sh start"
    done
;;
"stop")
        for i in master slave1 slave2
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper/bin/zkServer.sh stop"
    done
;;
"status")
        for i in master slave1 slave2
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper/bin/zkServer.sh status"
    done
;;
*)
    echo "Input Args Error..."
;;
esac

环境变量写在/etc/profile文件里面,如图:
在这里插入图片描述


原因分析:

据网上查找到的资料发现,登录Linux的方式不同,会导致自动加载环境有差异,既不同的登录模式会启动不同的bash模式:

  • 通过ssh远程登录虚拟机后再启用脚本和命令
    • 这种方式会使用Bash的interactive + login shell模式,在interactive + login shell模式中,Shell首先会加载/etc/profile文件,然后再尝试依次去加载~/.bash_profile~/.bash_login ~/.profile,这三个配置文件之一,只要找到其中一个就不会接着寻找
  • 通过ssh直接远程执行脚本和命令
    • 这种方式会使用Bash的non-interactive + non-login shell模式,这会创建一个shell,等执行完脚本之后便会直接退出,不需要与用户交互。
    • 这种模式下的bash不会去执行/etc/profile文件,而会去用户的HOME目录检查~/.bashrc并加载。
    • Bash通过BASH_ENV环境变量来记录要加载的文件,默认情况下这个环境变量并没有设置。如果有指定文件,那么Shell会先去加载这个文件里面的内容,然后再开始执行Shell脚本。

附:在这里插入图片描述


解决方案:

解决SSH远程执行命令时找不到自定义环境变量的问题,可以在登录用户的HOME目录的~/.bashrc中添加需要的环境变量。

  • ~/.bashrc,在这个文件里面添加相关的环境变量,最后再source ~/.bashrc
    在这里插入图片描述

通过ssh远程执行脚本和命令,里面遇到的找不到环境变量问题,也可以通过将你要写的环境变量写在/etc/profile.d这个文件夹底下,我这里是在地下,新建了一个叫bigdata_env.sh的bash文件,将要用的环境变量写在里面,最后再source /etc/profile,现在再去执行脚本文件就不会再出现找不到相关的环境变量问题,如图:
在这里插入图片描述


脚本成功的截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值