Bash 스크립트 호출을 만드는 방법 logstash 반환 프롬프트

Bash 스크립트 호출을 만드는 방법 logstash 반환 프롬프트

여러 가지 이유로 나는 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 플러그인을 기반으로 한 해결 방법이 탄생했습니다.

  1. 구현하다끼워 넣다
  2. 출구끼워 넣다

그러나 플러그인은 모든 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!"

관련 정보