Created
November 30, 2013 12:57
-
-
Save katoy/7718753 to your computer and use it in GitHub Desktop.
using daemons.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
require 'logger' | |
STDOUT.sync = true | |
STDERR.sync = true | |
def get_logger | |
ret = Logger.new(File.join(File.dirname(File.expand_path(__FILE__)), 'test.log')) | |
ret.level = Logger::INFO | |
ret | |
end | |
def show_message(str, logger = nil) | |
logger = get_logger unless logger | |
logger.info str | |
puts str | |
end | |
# Signal.trap(:HUP) { puts 'SIGHUPを受信' } | |
Signal.trap(:INT) { terminate 'SIGINTを受信' } | |
Signal.trap(:QUIT) { terminate 'SIGQUITを受信' } | |
Signal.trap(:KILL) { terminate 'SIGKILLを受信' } | |
Signal.trap(:TERM) { terminate 'SIGTERMを受信' } | |
Signal.trap(:INT) { terminate 'SIGINTを受信' } | |
Signal.trap(:QUIT) { terminate 'SIGQUITを受信' } | |
Signal.trap(:KILL) { terminate 'SIGKILLを受信' } | |
Signal.trap(:TERM) { terminate 'SIGTERMを受信' } | |
def terminate(str) | |
show_message(str) | |
exit 0 | |
end | |
def my_task(logger) | |
show_message('start task', logger) | |
sleep 2 | |
STDOUT.puts "# ----------- stdout #{Time.now}" | |
sleep 2 | |
STDERR.puts "# ----------- stderr #{Time.now}" | |
sleep 2 | |
show_message('end task', logger) | |
end | |
def main | |
logger = nil | |
loop do | |
if logger == nil | |
logger = get_logger | |
show_message('Logging start', logger) | |
end | |
my_task(logger) | |
sleep 2 | |
end | |
end | |
main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# 開始 | |
# ruby testdaemon.rb start | |
# 再起動 | |
# ruby testdaemon.rb restart | |
# 終了 | |
# ruby testdaemon.rb stop | |
# | |
require 'rubygems' | |
require 'daemons' | |
options = { | |
log_output: true, | |
} | |
Daemons.run(File.join(File.dirname(File.expand_path(__FILE__)), 'test.rb'), options) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ntsitm295139:lib youichikato$ cat testdaemon_1.rb | |
# -*- coding: utf-8 -*- | |
# See | |
# http://snippets.aktagon.com/snippets/212-how-to-create-a-daemon-process-using-ruby-and-the-daemons-rubygem | |
# > How to create a daemon process using Ruby and the daemons RubyGem | |
# | |
# 開始 | |
# ruby testdaemon_1.rb start | |
# 再起動 | |
# ruby testdaemon_1.rb restart | |
# 終了 | |
# ruby testdaemon_1.rb stop | |
# | |
require 'rubygems' | |
require 'daemons' | |
file = File.join(File.dirname(File.expand_path(__FILE__)), 'test.rb') | |
options = { | |
log_output: true # stdout, stderr を test.rb.output に保持する | |
} | |
Daemons.run_proc('test.rb', # name of daemon | |
options) do | |
exec "ruby #{file}" | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# See | |
# http://snippets.aktagon.com/snippets/212-how-to-create-a-daemon-process-using-ruby-and-the-daemons-rubygem | |
# > How to create a daemon process using Ruby and the daemons RubyGem | |
# | |
# http://wokowa.net/blog/archives/88 | |
# > Rubyのdaemonsでloggerからログ出す方法がよく分からなかった話 | |
# | |
# http://stackoverflow.com/questions/11237815/ruby-cant-write-to-logs-in-daemons | |
# > What does daemons internally do with my daemons? | |
# | |
# http://stackoverflow.com/questions/12266645/ruby-daemons-soft-stop | |
# > Ruby daemons soft stop | |
# | |
# 開始 | |
# ruby testdaemon_2.rb start | |
# 再起動 | |
# ruby testdaemon_2.rb restart | |
# 終了 | |
# ruby testdaemon_2.rb stop | |
# | |
# ----------------------------------------- | |
# task(logger) の処理を繰り返し実行する。 | |
# task 実行中に daemon の stop , restart の指示, kill pid をされても、 | |
# task の処理が途中で中断されることが無い様にした。 | |
# | |
# $ tail -f test.log や $ tail -f test.rb.output を別コンソールで実行しながら | |
# damon の stop, resatret, kill pid を行うと様子がよくわかる。 | |
# | |
# ----------------------------------------- | |
# ruby: ruby 1.9.3p484 (2013-11-22 revision 43786) [i386-darwin9.8.0] | |
# gem: daemons (1.1.9) | |
require 'rubygems' | |
require 'daemons' | |
require 'logger' | |
CWD = File.expand_path(File.dirname(__FILE__)) | |
STDOUT.sync = true | |
STDERR.sync = true | |
def task(logger) | |
# 時間がかかる処理を定義。 | |
# 処理の途中で daemon の stop, restart を行いやすくしてある。 | |
logger.info 'start task' | |
sleep 2; STDOUT.puts "# ------- task start #{Time.now}" | |
sleep 2; STDOUT.puts "# -- stdout #{Time.now}" | |
sleep 2; STDERR.puts "# -- stderr #{Time.now}" | |
sleep 2; STDOUT.puts "# ------- task end #{Time.now}" | |
logger.info 'fnish task' | |
end | |
# ------------------ | |
def get_logger | |
ret = Logger.new('test.log') | |
ret.level = Logger::INFO | |
ret | |
end | |
def log_info(logger, str) | |
logger = get_logger unless logger | |
logger.info str | |
logger | |
end | |
def show_message(str) | |
puts str | |
log_info(nil, str) | |
end | |
options = { | |
log_output: true, # stdout, stderr を test.rb.output に保持する | |
multiple: false, | |
ontop: false, | |
backtrace: true, | |
monitor: false | |
} | |
Daemons.run_proc('test.rb', # name of daemon | |
options) do | |
stopped = false | |
logger = nil | |
Signal.trap(:INT) { stopped = true; show_message 'SIGINTを受信' } | |
Signal.trap(:QUIT) { stopped = true; show_message 'SIGQUITを受信' } | |
Signal.trap(:KILL) { stopped = true; show_message 'SIGKILLを受信' } | |
Signal.trap(:TERM) { stopped = true; show_message 'SIGTERMを受信' } | |
Dir.chdir CWD | |
until stopped | |
logger = show_message 'Start Daemon' if logger.nil? | |
task(logger) | |
sleep 2 | |
end | |
show_message 'Finish Daemon' | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment