我一直在嘗試學習如何使用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肯定不是正確的選擇 –