Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Nov 2007 08:48:03 -0500
From:      Bill Moran <wmoran@collaborativefusion.com>
To:        Christopher Cowart <ccowart@rescomp.berkeley.edu>
Cc:        freebsd-rc@FreeBSD.org
Subject:   Re: Multiple instances of a daemon
Message-ID:  <20071107084803.6a3564db.wmoran@collaborativefusion.com>
In-Reply-To: <20071107082837.GM65098@hal.rescomp.berkeley.edu>
References:  <20071107082837.GM65098@hal.rescomp.berkeley.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
In response to Christopher Cowart <ccowart@rescomp.berkeley.edu>:

> 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.

-- 
Bill Moran
Collaborative Fusion Inc.
http://people.collaborativefusion.com/~wmoran/

wmoran@collaborativefusion.com
Phone: 412-422-3463x4023



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071107084803.6a3564db.wmoran>