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