[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