2012-04-08 24 views
34

¿Cuál es la forma correcta de iniciar un programa Go como daemon en Ubuntu? Luego lo supervisaré con Monit. ¿Debo hacer algo como:¿Cómo iniciar un programa Go como daemon en Ubuntu?

go run myapp.go & 

¿Hay cosas específicas de Go que deba tener en cuenta?

+0

si no hay una necesidad urgente de volver a compilar su aplicación cada vez que debe compilarla una vez y ejecutarla como lo hace con otros lenguajes compilados. ver la respuesta del abad – Bort

Respuesta

33

Usted debe construir un ejecutable para su programa (go build) y luego o bien escribir un guión para upstart y se ejecutará el programa como un demonio para usted, o utilizar una herramienta externa como daemonize. Prefiero la última solución, porque no depende de un advenedizo dependiente del sistema. Con daemonize puede iniciar su aplicación como

daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp.exe 

Esto le dará un proceso daemon UNIX se comporten bien con todas las preparaciones necesarias demonio realizados por daemonize.

+3

Así es como lo hemos hecho en el trabajo. Los goroutines complican la demonización en proceso. En RHEL usamos scripts de inicio/parada/reinicio estándar de Sys V. En otro lugar, querrá usar lo que sea que el sistema operativo objetivo use ... advenedizo, etc. En Windows tenemos un pequeño servicio de Windows escrito en C# que hace lo mismo allí. – Nate

+1

Gracias. ¿Te importaría compartir tu C# -code, Nate? – Atmocreations

+0

También hay https://github.com/fiorix/go-daemon como alternativa, específicamente creado para programas Go. – fiorix

6

Hay un informe de error con respecto a la capacidad de demonizar desde dentro de un programa Go: http://code.google.com/p/go/issues/detail?id=227 recomendaciones

Pero si lo que buscas es simplemente separando del proceso que he visto a bien hacer uno de los siguientes:

nohup go run myapp.go 

o

go run myapp.go & disown 

también puede hacer uso de un gestor de procesos, como escribir un init.d, Startup, o usando algo como Supervisor, que personalmente me gusta.

Cuestiones relacionadas