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

Ale*_*ean 4 haskell haskell-warp

我一直在研究使用Haskell Warp构建的像素服务器,并且一直在努力研究如何在守护模式下运行它.

Warp工作得很好 - 我可以使用runNetwork.Wai.Handler.Warp来提供HTTP,runTLS来自Network.Wai.Handler.WarpTLS来提供HTTPS,我可以通过生成一个新线程来运行它们:

startBoth :: Config -> IO ()
startBoth config = do
  _ <- forkIO $ startHTTPS config
  startHTTP config
Run Code Online (Sandbox Code Playgroud)

我的问题是弄清楚如何使用MissingH(System.Daemon)中的detachDaemon让我的服务器分离并在Ubuntu的后台运行.

在我的Main.h中我尝试添加这样的detachDaemon动作:

main :: IO ()
main =
  detachDaemon >> cmdArgs options >>= getConfig . optionsConfig >>= start
Run Code Online (Sandbox Code Playgroud)

但程序然后只是默默地退出而没有错误,并且在我运行时没有任何显示ps -ef | grep snowhuskyd.

我应该如何使用detachDaemon- 甚至可以使用Warp?我找不到detachDaemon在网上使用的任何一个例子- 任何帮助都会感激不尽!

Ale*_*ean 6

我已经做了一些挖掘并找到了这个帖子,其中一个Yesod用户(Yesod是构建在Warp之上的web框架)询问如何使用hdaemoniz e(另一个daemonization lib)守护Yesod ,以及Yesod/Warp头部管理员Michael斯诺曼说:

顺便说一句,我不同意守护进程是运行进程的正确方法,并认为Upstart(或守护进程,或天使,或......)是正确的方法.但我知道其他人对此有不同的看法.

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

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

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

  • 我赞同这种观点,并从外面分离我的守护进程.一个快速而肮脏的解决方案是使用start-stop-daemon,如果你的系统上有它. (3认同)