我有一个纯Ruby应用程序(这不是一个Web应用程序,所以不使用预现有的平台状的轨道,屈...)连续数据处理。如何软重启一个红宝石应用程序?
我打算用Capistrano部署它,并简单地使用ruby命令启动它。问题是我通过批量获取数据,并且可能需要几分钟时间来处理它们。
当我部署新版本时,我想介绍一个软重启,这意味着应用程序将首先通知有关新部署:因此它可以完成批处理,然后说'我准备好了更新“(部署脚本将等待该消息)。
有任何宝石是什么?也许Capistrano包含这个选项?
我有一个纯Ruby应用程序(这不是一个Web应用程序,所以不使用预现有的平台状的轨道,屈...)连续数据处理。如何软重启一个红宝石应用程序?
我打算用Capistrano部署它,并简单地使用ruby命令启动它。问题是我通过批量获取数据,并且可能需要几分钟时间来处理它们。
当我部署新版本时,我想介绍一个软重启,这意味着应用程序将首先通知有关新部署:因此它可以完成批处理,然后说'我准备好了更新“(部署脚本将等待该消息)。
有任何宝石是什么?也许Capistrano包含这个选项?
允许应用程序陷阱POSIX信号。看看Signal class。
如果发送kill <signal type>
的过程中,任何信号处理程序将被调用,不管什么样的过程,目前正在做。例如,您可以设置某种在您的逻辑中的某个敏感点进行检查的标志(例如,在运行循环结束时),如果设置了该标志,则会终止该进程。有many signals,你可以回应,但SIGHUP
或SIGUSR
信号的一个可能让你感觉在做什么......你可以到你在任何你喜欢的方式喜欢的任何信号作出响应,但它是有道理允许默认行为的大多数典型处理的行为(如SIGTERM
和SIGKILL
)。对于非常复杂的东西,您实际上可以接受一系列编码信号来触发特定事件。
Signal.trap("HUP") do
puts "Huh?"
end
loop do
puts "Looping..."
sleep 2
end
输出
[[email protected]:~%] ruby sig_demo.rb
Looping...
Looping...
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...
因为在另一个终端窗口我做:
[[email protected]:/usr/local%] ps aux | grep ruby
chris 69487 0.0 0.0 2425480 188 s005 R+ 11:26pm 0:00.00 grep ruby
chris 69462 0.0 0.1 2440224 4060 s004 S+ 11:26pm 0:00.03 ruby sig_demo.rb
[[email protected]:/usr/local%] kill -HUP 69462
[[email protected]:/usr/local%] kill -HUP 69462
刚开始它我一直在寻找的类,谢谢:) –
你需要更具体的有关应用程序。例如,使用Unicorn运行机架应用程序(Rails,Sinatra,Padrino等),您只需将USR2信号发送到独角兽主进程,它将启动一个新的独角兽进程而不会杀死旧进程,编写旧的PID文件然后,当新工作人员启动时,向旧工作人员(从旧的PID文件)发送QUIT ...在QUIT后,旧工作人员在完成处理后关闭。你的问题是没有一些背景太模糊;) – d11wtq
好吧,会加上一句:它基本上是一个普通的Ruby应用程序(而不是Web应用程序的话),在服务器上,我会简单地用“红宝石app.rb” –