4

我一直在研究使用 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

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

在我的 Main.hs 中,我尝试添加detachDaemon如下操作:

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

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

我应该如何使用detachDaemon- Warp 甚至可以吗?我找不到detachDaemon在 Web 上使用的单个示例 - 任何帮助都将不胜感激!

4

1 回答 1

6

我做了更多的挖掘并找到了这个线程,其中 Yesod 用户(Yesod 是构建在 Warp 之上的 Web 框架)询问如何使用hdaemoniz e(另一个守护程序库)和 Yesod/Warp 负责人 Michael斯诺伊曼 说:

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

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

Bump 团队的Angel看起来特别好,而且它是用 Haskell 编写的,所以也许我应该这样做,而不是试图将守护进程硬塞到我自己的应用程序中。

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

于 2012-03-29T23:15:59.873 回答