# = Daemonize # # Turns the current script into a daemon process # that detaches from the console. # It can be shut down with a TERM signal. # # == Authors # # * David Heinemeier Hansson # # == Copying # # Copyright (c) 2006 David Heinemeier Hansson # # Ruby License # # This module is free software. You may use, modify, and/or redistribute this # software under the same terms as Ruby. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # module Kernel # Turns the current script into a daemon process # that detaches from the console. # It can be shut down with a TERM signal. def daemonize exit if fork # Parent exits, child continues. Process.setsid # Become session leader. exit if fork # Zap session leader. See [1]. Dir.chdir "/" # Release old working directory. File.umask 0000 # Ensure sensible umask. Adjust as needed. STDIN.reopen "/dev/null" # Free file descriptors and STDOUT.reopen "/dev/null", "a" # point them somewhere sensible. STDERR.reopen STDOUT # STDOUT/ERR should better go to a logfile. trap("TERM") { exit } end end