I’m in the same boat you are at the moment, learning the various ways of
daemonizing code. So far, I’ve gotten a couple methods working.
First, have you tried forking your code? Look at the method described
here:
http://soa.dzone.com/snippets/daemonize-ruby-process
That was the first thing that I got working successfully. Of course you
have to manually kill the process afterward, using the ‘kill’ command in
the terminal, because there isn’t an automated way. To make my life
easier,
between the “pid = fork do” and the “loop do” I added this line: “puts
“'script_name' pid is set to #{Process.pid}”” so I can make a note of
what the pid is when I need to kill it later.
The second thing I got working was Daemons. Daemons’ documentation is
easier to read than the documentation for some other daemon gems. With
Daemons, you have your code, let’s suppose it is in ‘file_checker.rb’.
Create a new file, ‘file_checker_daemon.rb’. Then in
‘file_checker_daemon.rb’ put the following code, as explained in the
Daemons documentation at http://rubydoc.info/gems/daemons/1.1.9/frames:
require ‘daemons’
Daemons.run_proc do
loop do
sleep(5)
end
end
Afterwards, to daemonize your code simply do
ruby file_checker_daemon.rb start
and to stop it do
ruby file_checker_daemon.rb stop
Daemons will take care of remembering the pid, and the ‘start’ and
‘stop’
methods make it super easy to control, unlike the manual process of
forking
your code.
Hope that helps. Right now I’m trying to figure out how to do the same
thing using Dante and God. Maybe someone can help me? Dante seems to be
for
webservers only, I can’t seem to find in the documentation how to simply
daemonize some code. And for God, I have the following config, but it’s
not
working, I keep getting “start command exited with non-zero code = 1”.
filename is ‘script.god’
God.watch do |w|
w.name = “script”
w.dir = “/Users/me/ruby/”
w.pid_file = w.pid_file = File.join(“log/script.pid”)
w.log = “log/script.log”
w.start = “script.rb -P /log/script.pid -d”
end
Any suggestions, what am I doing wrong??
Thanks!