Multiple instances of a daemon

Bill Moran wmoran at
Wed Nov 7 13:23:44 PST 2007

In response to Christopher Cowart <ccowart at>:

> On Wed, Nov 07, 2007 at 08:48:03AM -0500, Bill Moran wrote:
> >In response to Christopher Cowart <ccowart at>:
> >> Hello,
> >> 
> >> I want to be able to use the same rc script to start several instances
> >> of a daemon. When I've encountered this desire before, I've cp'd the
> >> script, given it a unique name, and carried on with my business. This is
> >> a but kludgy and makes updating scripts a manual task.
> >> 
> >> Today, I realized the arpd port didn't provide an rc script, so I set
> >> out to write one. I also knew that I was going to be launching several
> >> different arpd's, so I wanted to figure out a better way to deal with
> >> this problem.
> >> 
> >> I thought I'd be clever and use symlinks:
> >> rc.d $ ls -l arpd*
> >> -r-xr-xr-x 1 root wheel 486 Nov  7 00:01 arpd
> >> lrwxr-xr-x 1 root wheel   4 Nov  6 23:32 arpd_vlan665 -> arpd
> >> lrwxr-xr-x 1 root wheel   4 Nov  6 23:32 arpd_vlan679 -> arpd
> >> 
> >> Then I wrote my rc script with `name=${0##*/}'. Everything was fantastic
> >> doing manual starts and stops. Then I tried rebooting...
> >> 
> >> After a few boots, some debugging, and a lot of tracing through /etc/rc
> >> and /etc/rc.subr, I found the problem (or is it a feature?).
> >> run_rc_script() sources the script. All the talk about not sourcing the
> >> "current shell" anymore, and I foolishly assumed that meant something
> >> more like calling the script and less like sourcing it in a subshell.
> >> 
> >> I would really find it convenient to use the symlink trick shown above,
> >> because it means a symlink-compatible rc-script can be updated by the
> >> port or mergemaster, and all the "copies" will "just work." I'd be
> >> willing to take the time to implement something, but I don't pretend 
> >> to know all the use cases or the motivation behind this design. 
> >> 
> >> One approach could be that run_rc_script() throws the rc script name
> >> into a variable visible to the sourced script, say _rc_script_name. 
> >> Then name could be something like `${_rc_script_name:-${0##*/}}' or a
> >> less terse if/then.
> >> 
> >> Is this a feature other people would like to see, or is it just me?
> >
> >The canonical way of doing this has been a "profiles"-enabled rc
> >script.  See the Apache or Slony rc scripts for examples.
> >
> >Not sure if your approach might be better.
> The jail rc script takes a smilar approach. It seems like when somebody
> wants to "profile" their script, they have to write the logic from
> scratch (or copy, paste, and tweak). Would a better solution be to 
> provide some default notion of profiling in the rc.subr library so rc 
> scripts can take advantage of it by default? 

Code in one place is always better than code in multiple places.

The challenge will be to come up with an API that is actually useable.

Bill Moran
Collaborative Fusion Inc.

wmoran at
Phone: 412-422-3463x4023

More information about the freebsd-rc mailing list