Macのバックグラウンド(デーモン)で常に実行されるRubyプログラムを作成したいと思います。
誰かがこれがどのように行われるかについて正しい方向に私を向けることができますか?
Daemonize.rbを使用する
require 'daemons'
Daemons.daemonize
非常に単純なサンプル: http://github.com/utkarsh2012/backitup/blob/master/backitup.rb
デーモンgemをインストールする方法:
gem install daemons
ああ、グーグルが救助に!チェックアウト
http://fitzgeraldsteele.wordpress.com/2009/05/04/launchd-example-start-web-server-at-boot-time/
ここで、役立つブロガーは、Ruby Webアプリケーションサーバーを起動するためのlaunchdplistを作成する例を提供します。
これは モジュール コードをデーモン化するためのものです。これが offshoot で、既存のスクリプトをラップします。
基本的に、これに要約されます(Travis WhittonのDaemonize.rbから、上記の最初のリンクは、私が何年も前に書いたいくつかのプログラム用に変更されています):
private
# This method causes the current running process to become a daemon
# If closefd is true, all existing file descriptors are closed
def daemonize(pathStdErr, oldmode=0, closefd=false)
srand # Split Rand streams between spawning and daemonized process
safefork and exit# Fork and exit from the parent
# Detach from the controlling terminal
unless sess_id = Process.setsid
raise 'Cannot detach from controlled terminal'
end
# Prevent the possibility of acquiring a controlling terminal
if oldmode.zero?
trap 'SIGHUP', 'IGNORE'
exit if pid = safefork
end
Dir.chdir "/" # Release old working directory
File.umask 0000 # Insure sensible umask
if closefd
# Make sure all file descriptors are closed
ObjectSpace.each_object(IO) do |io|
unless [STDIN, STDOUT, STDERR].include?(io)
io.close rescue nil
end
end
end
STDIN.reopen "/dev/null" # Free file descriptors and
STDOUT.reopen "/dev/null" # point them somewhere sensible
STDERR.reopen pathStdErr, "w" # STDOUT/STDERR should go to a logfile
return oldmode ? sess_id : 0 # Return value is mostly irrelevant
end
# Try to fork if at all possible retrying every 5 sec if the
# maximum process limit for the system has been reached
def safefork
tryagain = true
while tryagain
tryagain = false
begin
if pid = fork
return pid
end
rescue Errno::EWOULDBLOCK
sleep 5
tryagain = true
end
end
end
Rails 3(Rails_generatorに基づく)のdaemons-Railsgemを確認する必要があります:
https://github.com/mirasrael/daemons-Rails
次のようなデーモンスタブを生成できます。
Rails generate daemon <name>
特徴: