2011-10-27 12 views
19

Tengo un script, que necesito ejecutar después de comprometerme con un proyecto bajo control de revisión git. Por lo tanto, he creado un gancho post-commit en mis proyectos .git directorio en el subdirectorio/ganchos, la llamaron 'post-commit' y le dio el siguiente contenido:Git enganche post-commit como tarea en segundo plano

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

my_script es ejecutable y funciona muy bien en/bin/sh. De hecho, tiene un tiempo de ejecución de varios segundos, por lo que quiero que esté en segundo plano y separado del shell actual. Es por eso que puse el final '&' en mi gancho.

El problema ahora es que el '&' parece ignorado. Cuando me comprometo a usar gitx 0.7.1 bajo OSX Lion, gitx se cuelga durante exactamente el período que my_script necesita ejecutarse.

He intentado mucho, pero no consigo el proceso en sí mismo en segundo plano.

¿Qué pasa aquí?

Respuesta

13

Así es como funciona para mí:

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

David, mientras tanto encontré un enfoque similar: nohup/usr/local/bin/my_script 2> & 1>/dev/null & – GeorgieF

+0

No es exactamente la respuesta correcta, pero guiará a algunas personas: considere implementar un daemon real. Si está en ruby, puede usar Daemons o leer los conceptos básicos de lo que debería hacer en esta descripción de cómo funciona un daemon en Unix: http://daemons.rubyforge.org/Daemons.html –

2

intenta utilizar nohup

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

Hey WagnerVaz, intentaron eso, pero lamentablemente no funciona. El guión parece no separarse del proceso actual y gitx está desactualizado siempre que se ejecute el guión. – GeorgieF

1

Si cambia #!/bin/sh a #!/bin/bash (suponiendo que estás bien con el uso de bash), y el uso nohup, tu ejemplo debería funcionar

3

También podría usar el comando at. Es posible que tenga que instalar primero

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

O:

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

Ver la al (1) en el manual para obtener más información sobre al (man at o the online version)

Cuestiones relacionadas