24

I have a script, that I need to run after committing to a project under git revision control. Therefore I created a post-commit hook in my projects .git directory in the subdirectory /hooks, named it 'post-commit' and gave it the following contents:

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

my_script is executable and runs fine in /bin/sh. In fact it has a runtime of several seconds, so I want it to be backgrounded and detached from the current shell. That's why I put the trailing '&' to my hook.

The problem now is, that the '&' seems to be ignored. When I commit using gitx 0.7.1 under OSX Lion, gitx hangs for exactly the period that my_script needs to run.

I tried a lot, but do not get the process itself into the background.

What is wrong here?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
GeorgieF
  • 2,687
  • 5
  • 29
  • 43

4 Answers4

17

Here's how it works for me:

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &>/dev/null &
David
  • 186
  • 4
  • David, meanwhile I found a similar approach: nohup /usr/local/bin/my_script 2>&1 > /dev/null & – GeorgieF Nov 15 '11 at 11:22
  • Not exactly the correct answer, but will guide some people: consider implementing a real daemon. If in ruby you can use Daemons or read the basics of what you should be doing in this description of how a daemon works in unix: http://daemons.rubyforge.org/Daemons.html – David Pelaez Sep 12 '13 at 03:15
4

You could also use the at command. You may have to install it first

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

OR:

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

See the at(1) manual page for more info about at (man at or the online version)

Kaiden Prince
  • 472
  • 3
  • 18
2

Try to use nohup

#!/bin/sh
# I am a post-commit hook
nohup /usr/local/bin/my_script &
0xd
  • 1,891
  • 12
  • 18
  • Hey WagnerVaz, tried that, but unfortunately it does not work. The script seems not to detach from the current process and gitx is stale as long as the script runs. – GeorgieF Oct 27 '11 at 14:51
1

If you change #!/bin/sh to #!/bin/bash (assuming you're ok with using bash), and use nohup, your example should work.

Andrew Magee
  • 6,506
  • 4
  • 35
  • 58