我有一個純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」 –