我一直在努力学习如何使用make
并遇到一个障碍,我假设这与制定流程管理有关,而不是制作。
我有以下目标
install:
...
@brew install postgres
@pg_ctl -D data initdb
@pg_ctl -D data start
@createuser foo -s
我安装postgres,创建数据库,启动它,然后创建用户。
在这种情况下,createuser
继续失败,因为数据库还没有启动。
我假设需要发生的事情是我需要使用wait
来推迟创建用户命令,直到数据库启动,但经过一个小时的争吵之后,我有一种感觉#39;我没有正确使用像
@pg_ctl -D data start &
@wait $!
@createuser ...
知道我错过了什么吗?
答案 0 :(得分:4)
在-w
命令中添加pg_ctl ... start
选项,以确保在数据库启动完成之前命令没有返回:
@pg_ctl -w -D data start
来自man page(强调我的):
-w 等待启动或关闭完成。 等待是关机的默认选项,但不是启动 。等待启动时,pg_ctl会反复尝试连接到服务器。等待关闭时,pg_ctl等待服务器删除其PID文件。 pg_ctl根据启动或关闭成功返回退出代码。
至于您的解决方案尝试:
正如Oliver Charlesworth在对该问题的评论中指出的那样,@pg_ctl -D data start
和@pg_ctl -D data start &
后跟@wait $!
相当于相同的 :(有效地)同步执行 CLI 。
问题是,当执行 CLI本身(pg_ctl
)同步时,它触发的操作不是;添加-w
修复了。
事后看来,您的问题与make
无关。