2012-04-08 16 views
34

Qual è il modo corretto di avviare un programma Go come demone in Ubuntu? Lo monitorò quindi con Monit. Dovrei semplicemente fare qualcosa del tipo:Come avviare un programma Go come demone in Ubuntu?

go run myapp.go & 

Ci sono cose specifiche da fare che dovrei prendere in considerazione?

+0

se non vi è alcuna necessità urgente di ricompilare l'app ogni volta che è necessario crearlo una volta ed eseguirlo come avviene con altre lingue compilate. vedi la risposta dell'abate – Bort

risposta

33

Si dovrebbe costruire un eseguibile per il vostro programma (go build) e poi o scrivere uno script per upstart e verrà eseguito il programma come un demone per voi, o utilizzare uno strumento esterno come daemonize. Preferisco quest'ultima soluzione, perché non dipende da un upstart dipendente dal sistema. Con demonizzare è possibile avviare l'applicazione come

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

Questo vi darà un processo demone unix ben comportarsi con tutti i preparativi necessari demone fatto da demonizzare.

+3

Ecco come l'abbiamo fatta al lavoro. Le goroutine complicano la demonizzazione nel processo. Su RHEL utilizziamo script standard Sys V start/stop/restart. Altrove vorresti usare qualsiasi cosa il SO di destinazione usi ... upstart, ecc. Su Windows abbiamo un piccolo servizio Windows scritto in C# che fa la stessa cosa lì. – Nate

+1

Grazie. Ti dispiacerebbe condividere il tuo codice C#, Nate? – Atmocreations

+0

C'è anche https://github.com/fiorix/go-daemon come alternativa, appositamente creata per i programmi Go. – fiorix

6

C'è un bug report per quanto riguarda la capacità di demonizzare dall'interno di un programma Go: http://code.google.com/p/go/issues/detail?id=227 raccomandazioni

Ma se quello che cercate è solo staccando dal processo che ho visto a uno eseguire una delle seguenti operazioni:

nohup go run myapp.go 

o

go run myapp.go & disown 

Si può anche fare uso di un gestore di processo, come la scrittura di un init.d, Startup, o usando qualcosa come Supervisor, che personalmente mi piace davvero.

Problemi correlati