[Ruby] daemons in ruby

Ilya Palagin tux at fioc.kz
Wed Feb 5 07:54:04 MSK 2003


vic ismakaev wrote:
> 5 Февраль 2003 07:58, Ilya Palagin написал:
> 
>>Sergei Dolmatov wrote:
>>
>>>On Tue, Feb 04, 2003 at 02:31:55PM +0500, vic ismakaev wrote:
>>>
>>>>Приветствую!
>>>>А не подскажет ли мне кто: есть в природе дока/хавтушка по написанию
>>>>демонов/tcp-серверов на Ruby?
>>>
>>См. The Pragmatic Programmer's Guide, Network and Web Libraries.
> 
> К сожалению, пр демонов там ничего нет :(
> 
Зато про серверы и сокеты есть. Берем скрипт и запускаем его в фоновом 
режиме, заставляя реагировать на kill.


Нашел такой вот пример:

From: Amos (amos+lists.ruby-talk at utdallas.edu)
Subject: Re: daemon ruby script
View this article only
Newsgroups: comp.lang.ruby
Date: 2001-05-02 06:50:14 PST
...
##
## Become a daemon!
##
def go_daemon
   unless Process.uid == 0
     $stderr.puts "#{$0} must be run as root!"
     exit!
   end

   Dir.chdir PrayConfig.wrkdr
   File.umask 077
   trap "SIGCLD", "IGNORE"

   if $DEBUG
     $stderr.puts "DEBUG enabled, running in foreground"
   else
     ## close unneeded descriptors
     $stdin.close
     $stdout.close
     $stderr.close

     ## drop into the background.
     pid = fork
     if pid
       ## parent: save pid of child, then exit
       File.open(PrayConfig.pidfl, "w") do |file|
         file.puts pid
       end
       exit!
     end

     ## change process group and lose control tty
     Process.setpgrp
   end

   ## Run at higher priority so that runaways won't get away, but try
   ## not to directly compete with sched, pageout, and fsflush.
   Process.setpriority Process::PRIO_PROCESS, Process.pid, -10

   ## Initialize syslog
   $thishost = Socket.gethostbyname(Socket.gethostname)[0]
   $sl = Syslog.new 'pray', Syslog::LOG_PID|Syslog::LOG_CONS, 
Syslog::LOG_DAEMON
end

##
## "MAIN"
##
go_daemon




More information about the Ruby mailing list