Date: Fri, 15 Jun 2001 09:17:38 +0800 From: David Xu <bsddiy@163.net> To: Robert Watson <rwatson@FreeBSD.ORG> Cc: "Koster, K.J." <K.J.Koster@kpn.com>, Robert Withrow <bwithrow@nortelnetworks.com>, Cyrille Lefevre <clefevre@redirect.to>, <freebsd-hackers@FreeBSD.ORG> Subject: Re[2]: import NetBSD rc system Message-ID: <1252069305.20010615091738@163.net> In-Reply-To: <Pine.NEB.3.96L.1010614113409.27518D-100000@fledge.watson.org> References: <Pine.NEB.3.96L.1010614113409.27518D-100000@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello Robert,
Thursday, June 14, 2001, 11:39:37 PM, you wrote:
RW> On Thu, 14 Jun 2001, Koster, K.J. wrote:
>> > To do some of the hierarchal start/stop at runtime stuff, you
>> > really need
>> > a stateful rc system that stores its start/stop state in
>> > /var/run/rc.d or
>> > the like. In this way, the system could track various
>> > activities and know
>> > which dependencies were already started.
>>
>> How about /var/run/{$deamon}.pid?
RW> So, one of the things I've always hated (and loved) about UNIX is the pid
RW> system. One of the problems I have with (foo).pid is that pid's are
RW> rapidly recycled, so if a daemon dies, there's no way to track that unless
RW> you're a parent process (wherein you can reliably get the exiting
RW> information via SIGCHLD and wait()). The same goes for using killall as
RW> the superuser to find and kill processes such as inetd by name: you can
RW> easily kill other things if there are user processes with the same name,
RW> etc. In my view, the only really reliable way to manage daemon processes
RW> is as the parent of the process. Unfortunately, changing to that model
RW> would be a time-consuming, compatibility-limiting process which will
RW> probably not prove feasible.
RW> Just as an example of some potential suffering: suppose your system
RW> creates and destroyes about 200 processes a second, as it's a fairly
RW> heavily loaded user and web server. Such as system takes about five and a
RW> half minutes to recycle the pid space. If your sendmail daemon has pid
RW> 238 (or some other low pid), and dies, it takes about five minutes for
RW> some other process to adopt pid 238. However, /var/run/sendmail.pid will
RW> still contain 238, as it wasn't cleaned up due to untimely death. Sending
RW> a HUP signal to 238 could do a number of nasty things, including logging
RW> you out if it's your SSH daemon :-). Using IPC to manage the daemon, in
RW> the style of newer named versions, works well as long as you know the
RW> daemon is still functional--certainly much better than signals, with the
RW> exception of forceful termination.
RW> Robert N M Watson FreeBSD Core Team, TrustedBSD Project
RW> robert@fledge.watson.org NAI Labs, Safeport Network Services
My advice is:
Every scripts in rc.d has a status check function, for example:
"nfsd.sh status", if this command exits status 0 then it is runing
otherwise it is not running. let every script implements its own
method to detect if its daemon is up or down. rudely detect a
/var/run/${daemon}.pid file is just a typical way.
now every scripts should contains 3 functions:
start
stop
status
--
David Xu
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1252069305.20010615091738>
