我一直在尝试学习如何使用make
,并且遇到了一个我认为更多与流程管理无关的障碍。等待shell命令在makefile中执行
我有以下的目标
install:
...
@brew install postgres
@pg_ctl -D data initdb
@pg_ctl -D data start
@createuser foo -s
我安装的Postgres,创建数据库,启动它,然后创建一个用户。
在这种情况下,createuser
继续失败,因为数据库尚未启动。
我假设需要发生的是,我需要使用wait
阻止createuser命令,直到数据库启动,但在一小时的争吵后,我有一种感觉,我没有使用等待正确与类似
@pg_ctl -D data start &
@wait $!
@createuser ...
任何想法我失踪?
这不会有帮助 - 在后台运行,然后等待进程完成与在前台运行相同。问题是(可能)在数据库服务器实际准备好接收请求之前,'pg_ctl'进程返回。 –
我认为问题是'@pg_ctl -D data start'返回一个退出代码,说明数据库已经启动,但数据库继续在后台启动。以前我在DB2上遇到过这个问题。在这种情况下,您需要等待几秒钟,然后尝试,如果失败,再等几秒钟,然后重试,直到您确定它太长。 –
在这一点上,Make肯定不是正确的选择 –