Обработчик Git post-commit как фоновая задача

У меня есть сценарий, который мне нужно запустить после фиксации проекта в системе контроля версий git. Поэтому я создал обработчик post-commit в каталоге .git моих проектов в подкаталоге / hooks, назвал его post-commit и дал ему следующее содержимое:

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

my_script является исполняемым и отлично работает в / bin / sh. Фактически, его время выполнения составляет несколько секунд, поэтому я хочу, чтобы он был отключен от текущей оболочки. Вот почему я прикрепляю к крючку конечную букву «&».

Проблема в том, что «&», кажется, игнорируется. Когда я фиксирую использование gitx 0.7.1 под OSX Lion, gitx зависает ровно на период, необходимый для запуска my_script.

Я много пробовал, но сам процесс не отводится на задний план.

Что здесь не так?


person GeorgieF    schedule 27.10.2011    source источник


Ответы (4)


Вот как это работает для меня:

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &>/dev/null &
person David    schedule 15.11.2011
comment
Дэвид, тем временем я нашел похожий подход: nohup / usr / local / bin / my_script 2 ›& 1› / dev / null & - person GeorgieF; 15.11.2011
comment
Не совсем правильный ответ, но некоторых людей он подскажет: подумайте о реализации настоящего демона. Если в ruby ​​вы можете использовать демонов или прочитать основы того, что вы должны делать в этом описании того, как демон работает в unix: daemons.rubyforge.org/Daemons.html - person David Pelaez; 12.09.2013

Вы также можете использовать команду at. Возможно, вам придется сначала установить его

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

ИЛИ:

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

См. Страницу руководства at (1) для получения дополнительной информации о at (man at или онлайн-версии )

person Kaiden Prince    schedule 25.09.2015

Попробуйте использовать nohup

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &
person 0xd    schedule 27.10.2011
comment
Привет, ВагнерВаз, попробовал, но, к сожалению, не работает. Кажется, что скрипт не отключается от текущего процесса, и gitx устарел, пока скрипт выполняется. - person GeorgieF; 27.10.2011

Если вы измените #!/bin/sh на #!/bin/bash (при условии, что вы согласны с использованием bash) и используете nohup, ваш пример должен работать.

person Andrew Magee    schedule 07.05.2015