2011-10-27 71 views
19

我有一個腳本,需要在git修訂控制下提交到一個項目後運行。因此,我創造了我的項目在子目錄/鉤.git目錄,將其命名爲「後提交」一個post-commit鉤子並賦予它包含以下內容:作爲後臺任務的Git post-commit hook

#!/bin/sh 
# I am a post-commit hook 
/usr/local/bin/my_script & 

my_script是可執行文件並運行位於/ bin罰款/ SH。實際上它有幾秒的運行時間,所以我希望它能夠與當前shell分離。這就是爲什麼我把尾隨的'&'放在我的鉤子上。

現在的問題是,'&'似乎被忽略。當我在OSX Lion下使用gitx 0.7.1時,gitx掛起的時間恰好是my_script需要運行的時間。

我嘗試了很多,但並沒有將進程本身置入後臺。

這裏有什麼問題?

回答

13

下面是它的工作對我來說:

#!/bin/sh 
# I am a post-commit hook 
nohup /usr/local/bin/my_script &>/dev/null & 
+0

David,同時我發現了一個類似的方法:nohup/usr/local/bin/my_script 2>&1>/dev/null& – GeorgieF

+0

不完全正確的答案,但會引導一些人:考慮實現一個真正的守護進程。如果在ruby中你可以使用守護進程,或者讀一下你在這個Unix守護進程如何工作的描述中應該做的事情的基礎:http://daemons.rubyforge.org/Daemons.html –

2

嘗試使用nohup

#!/bin/sh 
# I am a post-commit hook 
nohup /usr/local/bin/my_script & 
+0

嘿WagnerVaz,嘗試更多信息將在(1)手冊頁見那,但不幸的是它不起作用。該腳本似乎不會脫離當前進程,只要腳本運行,gitx就會失效。 – GeorgieF

1

如果更改#!/bin/sh#!/bin/bash(假設你確定與使用bash),並使用nohup,你的例子應該工作。

3

您也可以使用at命令。您可能必須安裝它首先

echo /path/to/your/executable | at now 

OR:

echo bash /path/to/your/script | at now 

約在(man atthe online version