首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Thor (ruby)创建守护进程?

如何使用Thor (ruby)创建守护进程?
EN

Stack Overflow用户
提问于 2011-01-11 23:19:49
回答 1查看 1.3K关注 0票数 2

我想使用流行的雷神gem来创建一个守护任务。我的Thor类看起来像这样:

代码语言:javascript
复制
require 'rubygems'
require 'daemons'
require 'thor'

class CLI < Thor
  desc "start", "Startup the App"
  method_option :daemonize, :aliases => "-d", :default => false, :type => :boolean, :banner => "Run as daemon"
  def start
    run_app(options[:daemonize])
  end

  desc "stop", "Stop the daemon"
  def stop
    stop_app
  end

  no_tasks {
    def run_app(run_as_daemon)
      # Run the application code
      Daemons.daemonize if run_as_daemon
      # loop until stopped or interrupted
      # ...
    end

    def stop_app
      #stop the app
    end
  }
end

所以在这里我设置了一个基本的thor类,它有两个任务: start和stop。我目前也在使用守护进程gem,但这并不是必需的。我正在苦苦挣扎的是,当这个应用程序以"run_thor_app.rb start“的形式运行时,一切都运行得很好。显然,在这个实例中不需要stop任务。但当我运行"run_thor_app.rb start -d“时,应用程序会一直运行到Daemons.daemonize运行,然后退出。检查正在运行的进程会发现没有任何进程在后台运行。

即使有东西在运行,我也不知道如何处理stop任务。例如,如何检测到应用程序正在作为守护进程运行并停止它。我看过Daemons::Monitor,但文档并不清楚它是如何工作的,当我尝试它时,它不工作。

在我看来,这将是一个很好的内置在Thor中的东西的用例,但是在github上搜索代码并没有向我揭示任何东西。也许我只是错过了什么地方。在任何情况下,我认为记录一个使用Thor处理守护进程的最佳实践或模式,以供其他人参考是很好的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-12 00:57:09

您通常管理守护进程的方式是让它们在文件中写入它们的PID。这使得另一个进程可以发现守护进程的PID,并终止它(或发送其他信号)。

您的代码应该可以工作。我尝试了一个使用deamons gem的简单脚本,它花了我几次尝试,直到我找到了去deamonized进程。我认为它的名称应该与父进程相同,或者类似,但它的名称却是"self“。请记住,守护进程将不再写入STDOUT

不管怎样,试试这个:

代码语言:javascript
复制
# set up everything
# then daemonize
Daemons.daemonize
# and write a pid file
File.open('/tmp/mydaemon.pid', 'w') { |f| f.puts(Process.pid) }
loop do
  # do something
  # this loop is important, if the script ends the daemon dies
end

并检查/tmp/mydaemon.pid文件中的PID。然后运行ps ax | grep x,其中x是PID。运行cat /tmp/mydaemon.pid | xargs kill`杀死守护进程。

我认为daemons的gem有一些管理PidFiles的助手,请查看http://rubydoc.info/gems/daemons/1.1.0/frames中的PidFile

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4659164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档