在后台运行命令,等待特定的日志行,然后在前台运行新命令

在后台运行命令,等待特定的日志行,然后在前台运行新命令

我希望在数据库启动之前在 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

相关内容