Как запустить программу Go в качестве демон в Ubuntu?

Каков правильный способ запуска программы Go в качестве демон в Ubuntu? Затем я буду следить за ним с Монитом. Должен ли я просто сделать что-то вроде:

go run myapp.go &

Есть ли что-то особенное для Go, которое я должен учитывать?

Ответ 1

Вы должны создать исполняемый файл для своей программы (go build), а затем либо напишите script для upstart, и он запустит вашу программу как демона для вас или использовать внешний инструмент, например daemonize. Я предпочитаю последнее решение, потому что оно не зависит от зависящего от системы выскочка. С помощью daemonize вы можете запустить свое приложение, например

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

Это даст вам хороший процесс демона unix со всеми необходимыми приготовлениями daemon, выполненными daemonize.

Ответ 2

Существует отчет об ошибке для демонстрации из программы Go: http://code.google.com/p/go/issues/detail?id=227

Но если то, что вам нужно, просто отсоединяется от процесса, я видел рекомендации либо выполнить одно из следующих действий:

nohup go run myapp.go

или

go run myapp.go & disown

Вы также можете использовать диспетчер процессов, например, написать init.d, Startup или использовать что-то вроде Supervisor, что мне лично очень нравится.