【发布时间】: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