我一直在研究使用Haskell Warp构建的像素服务器,并且一直在努力研究如何在守护模式下运行它。
Warp很棒 - 我可以使用Network.Wai.Handler.Warp中的run
来提供来自Network.Wai.Handler.WarpTLS的HTTP runTLS
来提供HTTPS,我可以通过产生一个新线程:
startBoth :: Config -> IO ()
startBoth config = do
_ <- forkIO $ startHTTPS config
startHTTP config
我的问题是弄清楚如何使用MissingH(System.Daemon)中的detachDaemon将我的服务器分离并在Ubuntu的后台运行。
在我的Main.h中,我尝试添加detachDaemon
动作,如下所示:
main :: IO ()
main =
detachDaemon >> cmdArgs options >>= getConfig . optionsConfig >>= start
但程序然后只是默默地退出而没有错误,并且在我运行ps -ef | grep snowhuskyd
时没有任何显示。
我应该如何使用detachDaemon
- 甚至可以使用Warp?我找不到在网络上使用detachDaemon
的单一示例 - 感谢任何帮助!
答案 0 :(得分:6)
我已经做了一些挖掘并找到this thread,其中Yesod用户(Yesod是构建在Warp之上的Web框架)询问如何使用hdaemoniz e(另一个守护进程lib)守护Yesod ),Yesod / Warp负责人Michael Snoyman说:
来自Bump团队的顺便说一句,我不同意守护是正确的观念 运行流程的方式,并认为Upstart(或daemontools,或 天使,或......)是正确的方法。但我知道其他人有 关于此的不同意见。
换句话说:我不认为这是我们可以解决的问题,并且在此 特殊情况,我认为不值得修复。
Angel看起来特别好,并且它是用Haskell编写的,所以也许我应该继续使用它,而不是试图将守护进入我自己的应用程序。
我会暂时保留这个问题,以防人们有其他想法!