백그라운드에서 명령을 실행하고 특정 로그 줄을 기다린 다음 포그라운드에서 새 명령을 실행합니다.

백그라운드에서 명령을 실행하고 특정 로그 줄을 기다린 다음 포그라운드에서 새 명령을 실행합니다.

데이터베이스가 시작되기 전에 mssql 데이터베이스에서 일부 SQL 문을 실행하고 싶습니다(이는 docker RUN 단계의 일부로 발생함). 내가 아는 한, 이를 수행하는 유일한 방법은 백그라운드에서 서버를 시작하고 시작될 때까지 기다린 다음 sql 파일을 실행하고 서버를 종료하는 것입니다.

기반으로이 문제나는 다음과 같이 잘 작동합니다 :

/opt/mssql/bin/sqlservr & sleep 10 && /opt/mssql-tools/bin/sqlcmd -i whatever.sql && pkill sqlservr

문제는 sleep 10서버가 느리게 시작하면 좀 불안정하고, 빨리 시작하면 대기시간이 추가된다는 점이다. sleep 10섹션을 명령의 표준 출력을 모니터링 /opt/mssql/bin/sqlservr하고 특정 로그 줄이 일치할 때까지 차단하는 것으로 바꾸는 방법이 있습니까 ?

답변1

나는이 솔루션이 다음을 기반으로 작동한다고 생각합니다.이 슈퍼유저 답변:

( /opt/mssql/bin/sqlservr & ) | grep -q "Service Broker manager has started" && /opt/mssql-tools/bin/sqlcmd -i whatever.sql && pkill sqlservr

관련 정보