4
我見過很多不同的關於如何守護使用Go編寫的應用程序的建議,包括使用upstart或init.d.爲什麼不自己動手呢?這似乎是步驟很簡單:我可以在沒有外部工具的情況下守護golang進程嗎?
- 叉子和退出父
- 更改文件模式掩碼
- 創建一個唯一的會話ID
- 改變當前的工作目錄
- 關閉文件描述符
(source)
那麼爲什麼不在你的程序中這樣做,而不是依靠第三方軟件爲你完成一項簡單的任務呢?
我見過很多不同的關於如何守護使用Go編寫的應用程序的建議,包括使用upstart或init.d.爲什麼不自己動手呢?這似乎是步驟很簡單:我可以在沒有外部工具的情況下守護golang進程嗎?
(source)
那麼爲什麼不在你的程序中這樣做,而不是依靠第三方軟件爲你完成一項簡單的任務呢?
從Go程序直接與fork()混淆非常危險。基於等效C程序的典型deamonize實現是不安全的。
你可能有興趣通過以下程序包所使用的方法: https://github.com/VividCortex/godaemon
'init.d'只是守護進程管理器,它不daemonise。 Debian上的所有守護進程都應該和'init.d'搭配使用。至於爲什麼它似乎很難,看看[這個公開的問題](https://github.com/golang/go/issues/227)。 – Amadan
分叉Go程序是不安全的。 –