由于各种原因,我没有将logstash(7.10.1)作为服务运行,而是在bash脚本中按需调用它:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/my_ls.conf &
echo ""
echo "#########################################################"
read -p "Press enter to continue "
它工作得很好,但是当成功创建elasticsearch索引时,它总是暂停:
[INFO ] [[main]-pipeline-manager] javapipeline - Pipeline Java execution initialization time {"seconds"=>1.3}
[INFO ] [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"}
[INFO ] [[main]<file] observingtail - START, creating Discoverer, Watch with file and sincedb collections
[INFO ] [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[INFO ] [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
为了使其返回到 CLI 提示符,我需要从另一个 SSH 终端运行以下命令:
pkill -f logstash
这当然很不方便,我正在寻找一种方法让 bash 脚本提示“按任意键退出”。
我的问题是,logstash 调用(附加)之后的语句(包括&
提示)read -p "Press enter to continue"
会在 Logstash 实际开始执行其工作之前显示,并且 bash 脚本永远不会退出到 CLI 提示符。
当logstash完成索引创建时,使bash脚本提示“按任意键退出”的正确方法是什么?
答案1
解决了!
具体方法如下:
首先,重要的是要承认,正如@roaima 所指出的那样,它的设计目的确实logstash
不是为了构建索引然后退出。掌握这些知识有助于专注于@Alex 建议的解决方法。此外,这个已知的限制导致了基于logstash插件的解决方法,如下所述:
然而,插件需要安装在每个logstash实例上,并在每个.conf文件中都有自己的声明。
所以,我发现了这个UL 答案,它给我提供了解决方案:
LS_OUTPUT=$(mktemp "${TMPDIR:-/tmp/}$(basename 0).XXX")
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/my_ls.conf &> $LS_OUTPUT &
LS_PID=$!
echo "Logstash pid: ${LS_PID}"
echo "Logstash output: $LS_OUTPUT"
echo "Wait:"
until grep -q -i 'agent - Successfully started Logstash API endpoint' $LS_OUTPUT
do
if ! ps $server_pid > /dev/null
then
echo "Logstash died. Exiting." >&2
exit 1
fi
echo -n "."
sleep 1
done
echo
echo "Logstash is running!"