如何在守护进程模式下运行Warp?

时间:2012-03-29 18:58:19

标签: haskell haskell-warp

我一直在研究使用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的单一示例 - 感谢任何帮助!

1 个答案:

答案 0 :(得分:6)

我已经做了一些挖掘并找到this thread,其中Yesod用户(Yesod是构建在Warp之上的Web框架)询问如何使用hdaemoniz e(另一个守护进程lib)守护Yesod ),Yesod / Warp负责人Michael Snoyman说:

  

顺便说一句,我不同意守护是正确的观念   运行流程的方式,并认为Upstart(或daemontools,或   天使,或......)是正确的方法。但我知道其他人有   关于此的不同意见。

     

换句话说:我不认为这是我们可以解决的问题,并且在此   特殊情况,我认为不值得修复。

来自Bump团队的

Angel看起来特别好,并且它是用Haskell编写的,所以也许我应该继续使用它,而不是试图将守护进入我自己的应用程序。

我会暂时保留这个问题,以防人们有其他想法!