【问题标题】:How to run Warp in daemonized mode?如何在守护模式下运行 Warp?
【发布时间】:2012-04-13 11:20:22
【问题描述】:

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

Warp 效果很好 - 我可以使用 Network.Wai.Handler.Warp 中的 run 来服务 HTTP,使用 Network.Wai.Handler.WarpTLS 中的 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 的单个示例 - 任何帮助都将不胜感激!

【问题讨论】:

    标签: haskell haskell-warp


    【解决方案1】:

    我做了更多的挖掘并找到了this thread,其中一个 Yesod 用户(Yesod 是构建在 Warp 之上的 Web 框架)询问如何使用 hdaemonize(另一个守护程序库)来守护 Yesod,并且Yesod/Warp head honcho Michael Snoyman 说:

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

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

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

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

    【讨论】:

    • 我同意这个观点,我将我的守护进程与外部分离。一个快速而肮脏的解决方案是使用 start-stop-daemon,如果你的系统上有它的话。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多