2013-07-18 132 views
10

我對post-receive執行單元測試,但不希望用戶等待它。異步git鉤子?

我試圖從混帳用戶郵件列表(「只是&它」)的建議,但是這是行不通的:https://groups.google.com/forum/#!topic/git-users/CFshrDgYYzE

混帳似乎等待bash腳本退出,即使我只是把這個在掛鉤/收到後:

exec-unit-tests.sh & 
+0

您是否嘗試了該帖子中建議的其他方式使用cron安排異步作業?像'at'來按需安排工作(並且在將來不遠)可能也值得研究 –

+0

這也可能工作,但我沒有嘗試它。 – oberhamsi

回答

17

這對我有效。 &和標準輸出& stderr管道必須關閉:

long-running-command >&- 2>&- & 

爲了把命令的背景下,這兩個stdoutstderr必須關閉。如果其中任何一個保持打開狀態,則進程將不在後臺,並且在完成鉤子腳本之前提交操作纔會完成。

懶惰的另一種方法是簡單地重定向stdoutstderr/dev/null

long-running-command >/dev/null 2>&1 & 

這是一個有點不太乾淨,但也許更容易理解和記憶,並且具有相同的效果。

+0

found here:http://git.661346.n2.nabble.com/Background-processes-in-post-receive-hook-td6235357.html – oberhamsi

+0

其實'stdout'和'stderr'都必須關閉(就像你的答案一樣已經做到了)。如果其中任何一個保持打開,則該過程將不在後臺。我個人使用'>/dev/null 2>/dev/null&'來獲得相同的效果,因爲它更容易知道沒有在man bash中查找的內容。 – janos

+1

我更喜歡你的/ dev/null解決方案!請讓它成爲答案 – oberhamsi