2012-03-29 90 views
4

我一直在使用Haskell Warp構建像素服務器,並一直在努力研究如何在守護進程模式下運行它。如何在守護進程模式下運行Warp?

經的偉大工程 - 我可以使用run從Network.Wai.Handler.Warp從Network.Wai.Handler.WarpTLS服務HTTP,runTLS服務HTTPS,我可以通過生成一個新的線程同時運行:

startBoth :: Config -> IO() 
startBoth config = do 
    _ <- forkIO $ startHTTPS config 
    startHTTP config 

我的問題是搞清楚如何使用MissingH(System.Daemon)的detachDaemon來讓我的服務器脫離並在Ubuntu的後臺運行。

在我Main.hs我試着加入detachDaemon行動,像這樣:

main :: IO() 
main = 
    detachDaemon >> cmdArgs options >>= getConfig . optionsConfig >>= start 

但隨後的程序只是默默的退出沒有錯誤,沒有任何東西顯示出來,當我運行ps -ef | grep snowhuskyd

我應該如何使用detachDaemon - 甚至可以用Warp?我無法在網上找到一個使用detachDaemon的例子 - 任何幫助都會得到感謝!

回答

6

我做了一些更多的挖掘和發現this thread,其中耶索德用戶(耶索德是建立在經頂部的Web框架)詢問如何使用耶索德hdaemoniz E(另一種系統守護進程LIB)來守護進程,以及耶索德/經頭町邁克爾Snoyman說:

順便說一句,我不同意的概念,即daemonizing是運行過程中的權利 方式,並認爲新貴(或daemontools的,或 天使,或...)是正確的做法。但是我知道別人對此有不同的看法 。

換句話說:我不認爲這是我們可以解決的問題,在這個特殊情況下,我認爲這不值得修復。

Angel從凹凸隊看起來特別漂亮,而且它是寫在Haskell,所以也許我應該用去,而不是試圖鞋拔子系統守護進程到自己的應用程序。

我會離開這個問題,但現在如果人們有其他的想法,現在開放!

+3

我分享這個觀點,我從外面分離我的守護進程。一個快速和骯髒的解決方案是使用start-stop-daemon,如果你的系統上有它。 – 2012-03-30 10:38:07

相關問題