2012-03-29 49 views
4

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

经的伟大工程 - 我可以使用run从Network.Wai.Handler.Warp从Network.Wai.Handler.WarpTLS服务HTTP,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的例子 - 任何帮助都会得到感谢!

回答

6

我做了一些更多的挖掘和发现this thread,其中耶索德用户(耶索德是建立在经顶部的Web框架)询问如何使用耶索德hdaemoniz E(另一种系统守护进程LIB)来守护进程,以及耶索德/经头町迈克尔Snoyman说:

顺便说一句,我不同意的概念,即daemonizing是运行过程中的权利 方式,并认为新贵(或daemontools的,或 天使,或...)是正确的做法。但是我知道别人对此有不同的看法 。

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

Angel从凹凸队看起来特别漂亮,而且它是写在Haskell,所以也许我应该用去,而不是试图鞋拔子系统守护进程到自己的应用程序。

我会离开这个问题,但现在如果人们有其他的想法,现在开放!

+3

我分享这个观点,我从外面分离我的守护进程。一个快速和肮脏的解决方案是使用start-stop-daemon,如果你的系统上有它。 – 2012-03-30 10:38:07

相关问题