【问题标题】:passing multiple functions to remote shell/ mkdir cannot find directory将多个函数传递给远程 shell/mkdir 找不到目录
【发布时间】:2020-02-07 21:07:47
【问题描述】:

我正在编写一个能够部署和配置整个 elasticsearch 集群的 BASH 脚本。目前我有两个安装程序脚本,以及处理所有 SSH 逻辑和安全配置的配置脚本。

除了两个功能外,一切似乎都完美无缺。

    echo "Transmitting functions and arrays for remote execution!"
    ssh -T "root@$kbip" <<-LIMITBREAK
        eval `typeset -p kibConfigSer`
        eval `typeset -p kibConfigChan`
        eval `typeset -p esip`
        `declare -f checkLocalKibanaConfig`; checkLocalKibanaConfig
        `declare -f createDirectories`; createDirectories
    LIMITBREAK
        echo
        echo "Transmitting functions and array for remote execution!"
        ssh -T "root@$allnodes[x]" <<-LIMITBREAK
            eval `typeset -p esConfig`
            `declare -f checkLocalElasticConfig`; checkLocalElasticConfig
            `declare -f createDirectories`; createDirectories
        LIMITBREAK

这些是我用来在远程 shell 中定义函数的 HEREDOC。目前第一个声明工作正常。它能够将所有配置设置传递给数组 esConfig,并且函数 checkLocalElasticConfig 已定义并可访问数组中的字符串。

但是,无论我尝试什么,第二个声明什么都不做。逻辑检查 kibana 目录/elastic 目录是否存在,并成功检查 certs 目录是否不存在。但是当它尝试执行 mkdir 命令时...

mkdir: Cannot create directory '/etc/directory/certs': No such file or directory

我完全被难住了。我知道 etc 存在,我知道目录存在,并且 certs 不存在这个函数:

function createDirectories () 
{
    #Checks if ElasticSearch is present
    if [ -d "/etc/elasticsearch" ] 
    then
        if [ -d "/etc/elasticsearch/certs" ] 
        then
            echo "Directory /etc/elasticsearch/certs exists." 
        else
            echo "/etc/elasticsearch/certs in ElasticSearch does not exist! Making directory!"
            mkdir "/etc/elasticsearch/certs"
        fi
    fi

    #Checks if Kibana is present
    if [ -d "/etc/kibana" ] 
    then
        if [ -d "/etc/kibana/certs" ] 
        then
            echo "Directory /etc/kibana/certs exists." 
        else
            echo "/etc/kibana/certs in Kibana does not exist! Making directory!"
            mkdir "/etc/Kibana/certs"
        fi
    fi
}

应该处理。

此脚本的目的是 createDirectory 函数可供本地使用,并在必要时定义为在配置集群节点时远程使用。

任何想法我做错了什么?或者我可以做得更好?

【问题讨论】:

    标签: bash elasticsearch centos kibana mkdir


    【解决方案1】:

    Linux 区分大小写。您检查了if [ -d "/etc/kibana" ],但mkdir 试图在/etc/Kibana 下创建一个目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2018-05-05
      • 1970-01-01
      • 2011-05-30
      • 2022-11-04
      相关资源
      最近更新 更多