2012-04-08 12 views
34

Was ist der richtige Weg, um ein Go-Programm als Daemon in Ubuntu zu starten? Ich werde es dann mit Monit überwachen. Sollte ich nur etwas tun wie:Wie starte ich ein Go-Programm als Daemon in Ubuntu?

Gibt es Go-spezifische Dinge, die ich berücksichtigen sollte?

+0

Wenn Sie Ihre App nicht jedes Mal neu kompilieren müssen, sollten Sie sie einmal erstellen und dann wie in anderen kompilierten Sprachen ausführen. siehe Abt's Antwort – Bort

Antwort

33

Sie sollten eine ausführbare Datei für das Programm (go build) und dann bauen entweder ein Skript für upstart schreiben und es wird Ihr Programm als Daemon für Sie, oder verwenden Sie ein externes Tool wie daemonize laufen. Ich bevorzuge die letztere Lösung, weil es nicht auf einen systemabhängigen Upstart ankommt. Mit daemonize können Sie Ihre Anwendung starten wie

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

Dies wird Ihnen ein gut verhalten Unix-Daemon-Prozess mit allen notwendigen Daemon Vorbereitungen daemonize getan.

+3

So haben wir es bei der Arbeit gemacht. Goroutinen komplizieren die Daemonisierung im Prozess. Auf RHEL verwenden wir Standard-Sys-V-Start/Stop/Restart-Skripte. Anderswo möchten Sie verwenden, was auch immer das Ziel-Betriebssystem verwendet ... Upstart, etc. Unter Windows haben wir einen kleinen Windows-Dienst in C# geschrieben, der das gleiche tut. – Nate

+1

Vielen Dank. Würde es dir etwas ausmachen, deinen C# -Code zu teilen, Nate? – Atmocreations

+0

Es gibt auch https://github.com/fiorix/go-daemon als Alternative, speziell für Go-Programme. – fiorix

6

Es gibt einen Bericht Fehler in Bezug auf die Fähigkeit, innerhalb eines Go-Programm daemonize: http://code.google.com/p/go/issues/detail?id=227

Aber wenn das, was Sie sind nach nur aus dem Prozess Abnehmen habe ich Empfehlungen gesehen entweder zu einem do der folgenden Möglichkeiten:

nohup go run myapp.go 

oder

go run myapp.go & disown 

Sie können auch die Verwendung eines Prozess-Manager machen, wie einschreiben 0, Startup, oder mit etwas wie Supervisor, die ich persönlich sehr mag.