2011-10-27 15 views
19

Ho uno script, che devo eseguire dopo aver eseguito il commit su un progetto con git revision control. Quindi ho creato un-commit dopo gancio nei miei progetti .git directory nella sottodirectory/ganci, la chiamarono 'post-commit' e ha dato i seguenti contenuti:Git post-commit hook come attività in background

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

mio_script è eseguibile e funziona bene in/bin/sh. In effetti ha un tempo di esecuzione di diversi secondi, quindi voglio che sia in background e staccato dalla shell corrente. Ecco perché ho inserito il trattino "&" nel mio hook.

Il problema ora è che il '&' sembra essere ignorato. Quando eseguo il commit usando gitx 0.7.1 sotto OSX Lion, gitx si blocca esattamente per il periodo che my_script deve eseguire.

Ho provato molto, ma non riesco a ottenere il processo stesso in background.

Cosa c'è di sbagliato qui?

risposta

13

Ecco come funziona per me:

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

David, nel frattempo ho trovato un approccio simile: nohup/usr/local/bin/my_script 2> & 1>/dev/null & – GeorgieF

+0

Non è esattamente la risposta corretta, ma guiderà alcune persone: considera l'implementazione di un demone reale. Se nel ruby ​​puoi usare i demoni o leggere le basi di ciò che dovresti fare in questa descrizione di come funziona un demone in unix: http://daemons.rubyforge.org/Daemons.html –

2

tenta di utilizzare nohup

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

Hey WagnerVaz, provato quello, ma sfortunatamente non funziona. Lo script sembra non staccarsi dal processo corrente e gitx è obsoleto finché viene eseguito lo script. – GeorgieF

1

Se si cambia #!/bin/sh-#!/bin/bash (supponendo che stai bene con l'utilizzo di bash), e utilizzare nohup, il tuo esempio dovrebbe funzionare.

3

È anche possibile utilizzare il comando at. Potrebbe essere necessario installare prima

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

O:

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

Vedere l'a (1) pagina di manuale per maggiori informazioni su a (man at o the online version)