2012-02-05 32 views
6

我有一個啓動Django Web服務器的Makefile。我希望服務器在後臺啓動,將PID保存到文件中。捕獲由Makefile啓動的後臺進程的PID

我的食譜是這樣的:

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 

直觀,背景過程,捕捉PID,我不得不做這樣的事情:

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid" 

這不起作用,但是。子shell是 '製作' 使用(在我的情況下/ bin/sh的)的作品,當你使用:

<command> & 

...背景的過程,和作品時使用:

<command> ; <command> 

(或者<command> && <command>等)來鏈接命令。然而,當我嘗試後臺第一進程和連鎖的第二個,我得到以下錯誤:

/bin/sh: -c: line 0: syntax error near unexpected token `;'

什麼背景的最好方式是一個過程,捕捉PID在一個Makefile?

感謝
- B

+0

我很好奇,爲什麼你使用'make'啓動網絡服務器?這是某種測試套件嗎?祝你好運! – shellter 2012-02-05 23:35:10

+0

@shelter:我正在開發一個web應用程序,並且我正在使用一個Makefile來提供一種啓動本地Web服務器的快速方法,用於開發和測試目的。 – BillyBBone 2012-02-06 02:24:21

回答

17

剛剛離開一個符號,沒有一個分號後:

run: venv 
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & echo "$$!" > "${LOGDIR}/django.pid" 

與號作爲以同樣的方式作爲一個分號命令分隔符:

<command> & <command> 
+0

我每天都在學習新的東西!謝謝! ;) – BillyBBone 2012-02-06 00:55:23

+0

@比利,其實,我也是。 :) – 2012-02-06 09:16:33

0

如果make給你太麻煩,你總是可以有目標發射的sh腳本;在該腳本中,啓動進程,背景,然後將該pid輸出到文件。

+0

這可能會起作用,但由於makefile只是一個shell宏命令,我可能會在我的shell腳本中遇到同樣的問題。那裏的解決方案應該直接適應makefile,而不是添加另一層抽象和依賴關係。 – BillyBBone 2012-02-06 00:57:56

+0

是的。我很多時候都試圖讓它在shell腳本中工作,然後將其遷移到Makefile中。 – 2012-02-06 17:02:24