여러 가지 이유로 나는 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!"