2011-10-27 14 views
19

Mam skrypt, który muszę uruchomić po zatwierdzeniu do projektu w ramach kontroli wersji git. Dlatego stworzyliśmy ofertę post-commit w moich projektach .git katalogu w podkatalogu/haki, nazwał ją „post-commit” i dał następującą zawartość:Git Hak po zatwierdzeniu jako zadanie w tle

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

my_script jest wykonywalny i działa dobrze w/bin/sh. W rzeczywistości ma czas działania kilku sekund, więc chcę, aby był w tle i odłączony od bieżącej powłoki. Dlatego umieszczam na haku ciągnącą się "&".

Problem polega na tym, że "&" wydaje się być ignorowany. Kiedy zatwierdzam używanie gitx 0.7.1 pod OSX Lion, gitx zawiesza się dokładnie na czas, który musi wykonać mój_script.

Bardzo dużo próbowałem, ale sam proces nie został wprowadzony w tło.

Co jest nie tak?

Odpowiedz

13

Oto jak to działa dla mnie:

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

David, w międzyczasie znalazłem podobne podejście: nohup/usr/local/bin/my_script 2> & 1>/dev/null & – GeorgieF

+0

Niezupełnie poprawna odpowiedź, ale poprowadzi niektórych ludzi: rozważ wdrożenie prawdziwego demona. Jeśli w ruby ​​możesz użyć Daemon lub przeczytać podstawy tego, co powinieneś robić w tym opisie demona działającego w systemie Unix: http://daemons.rubyforge.org/Daemons.html –

2

Spróbuj użyć nohup

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

Hej WagnerVaz, próbował to, ale niestety to nie działa. Wydaje się, że skrypt nie odłącza się od bieżącego procesu, a gitx jest nieaktualny, dopóki działa skrypt. – GeorgieF

1

Jeżeli zmienisz #!/bin/sh do #!/bin/bash (zakładając, że jesteś ok z użyciem bash) i używać nohup, Twój przykład powinien zadziałać.

3

Można również użyć polecenia at. Być może trzeba będzie zainstalować najpierw

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

OR:

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

Zobacz co (1) strony podręcznika, aby uzyskać więcej informacji o punkcie (man at lub the online version)