rc.subr questions

Chris Rees crees at FreeBSD.org
Fri Dec 7 07:20:30 UTC 2012


On 6 December 2012 21:50, Paul Schmehl <pschmehl_lists at tx.rr.com> wrote:
> --On December 6, 2012 9:30:04 PM +0000 Chris Rees <crees at FreeBSD.org> wrote:
>
>> On 6 December 2012 21:10, Paul Schmehl <pschmehl_lists at tx.rr.com> wrote:
>>>
>>> --On December 6, 2012 8:45:50 PM +0000 Chris Rees <crees at FreeBSD.org>
>>> wrote:
>>>
>>>> [CC rc@]
>>>>
>>>> On 6 December 2012 20:36, Paul Schmehl <pschmehl_lists at tx.rr.com> wrote:
>>>>>
>>>>>
>>>>> I'm trying to figure out how to get an rc.subr script to start and
>>>>> stop a script.
>>>>>
>>>>> This works from the commandline (to start it):
>>>>> tclsh /usr/local/bin/dir/script -D -c /usr/local/etc/conffile
>>>>>
>>>>> I've tried various combinations of:
>>>>>
>>>>> command_interpreter
>>>>> argument_precmd
>>>>> command_args
>>>>>
>>>>> but I keep getting this error:
>>>>> unknown directive '/usr/local/bin/sguil-sensor/pads_agent.tcl'
>>>>>
>>>>> Doesn't matter if I make that string the val for command and don't use
>>>>> command_interpreter or do use command_interpreter.
>>>>>
>>>>> I've read the man page over and over, but I'm clueless as to how to use
>>>>> run_rc_script, which I *think* is the right way to call this script.
>>>>>
>>>>
>>>> Make the script executable
>>>
>>>
>>>
>>> It is.
>>>
>>>
>>> , put a shebang in; #!/usr/bin/env tclsh
>>>
>>> Here's the current script's starting lines:
>>>
>>> # !/bin/sh
>>> # Run tcl from users PATH \
>>> exec tclsh "$0" "$@"
>>>>
>>>>
>>>>
>>>> # !/bin/sh
>>>>
>>>>
>>>> . /etc/rc.subr
>>>>
>>>> name=tclshexample
>>>> rcvar=tclshexample_enable
>>>>
>>>> load_rc_config $name
>>>>
>>>> : ${tclshexample_enable=YES}
>>>>
>>>> command="/usr/local/bin/dir/script"
>>>> command_interpreter=tclsh
>>>> command_args="-D -c /usr/local/etc/conffile"
>>>>
>>>> run_rc_command $@
>>>>
>>>> http://www.bayofrum.net/~crees/scratch/tclshexample
>>>>
>>>> Would be much easier if you were to provide specifics or the actual
>>>> script :)
>>>>
>>>> Chris
>>>>
>>>
>>> Here's the rc script I'm working on.
>>>
>>> . /etc/rc.subr
>>>
>>> load_rc_config pads_agent
>>>
>>> # set defaults
>>>
>>> pads_agent_enable=${pads_agent_enable:-"NO"}
>>> pads_agent_conf=${pads_agent_conf:-"/usr/local/etc/sguil-sensor/pads_age
>>> nt.conf"} pads_agent_flags="${pads_agent_flags}:-"-D -c
>>> ${pads_agent_conf}"
>>>
>>> name="pads_agent"
>>> rcvar=pads_agent_enable
>>>
>>> command="/usr/local/bin/sguil-sensor/pads_agent.tcl"
>>> command_interpreter="tclsh"
>>> command_args=${pads_agent_flags}
>>>
>>> run_rc_command "$@"
>>>
>>> Here's the error I'm getting when I run start:
>>>
>>> /usr/local/etc/rc.d/pads_agent: WARNING: $command_interpreter tclsh !=
>>> /bin/sh
>>> Starting pads_agent.
>>> /usr/local/etc/rc.d/pads_agent: WARNING: $command_interpreter tclsh !=
>>> /bin/sh
>>> /usr/local/etc/rc.d/pads_agent: unknown directive
>>> '/usr/local/bin/sguil-sensor/pads_agent.tcl'.
>>> Usage: /usr/local/etc/rc.d/pads_agent
>>> [fast|force|one|quiet](start|stop|restart|rcvar|status|poll)
>>> /usr/local/etc/rc.d/pads_agent: WARNING: failed to start pads_agent
>>>
>>> I tried changing the interpreter to "/bin/sh" but I got the same error.
>>>
>>> Here's the perms on the script:
>>>
>>> # ls -lsa /usr/local/bin/sguil-sensor/pads_agent.tcl
>>> 12 -r-xr-xr-x  1 root  wheel  11662 Dec  6 18:31
>>> /usr/local/bin/sguil-sensor/pads_agent.tcl
>>
>>
>> The problem is I think that the idiomatic tclsh syntax is to use the
>> # !/bin/sh shebang followed by some compat stuff... which doesn't play
>>
>> nicely with rc's idea of how scripts should look.
>>
>> If instead we use procname, that should work better.
>>
>> http://www.bayofrum.net/~crees/scratch/tclshexample2
>>
>> Does your tclsh script daemonise?
>
>
> It's supposed to, but it fails.  Let's cease this discussion for now while I
> do some troubleshooting.  I think I have bigger problems than just the
> rc.subr stuff, and I don't want to waste any more of your time.
>

I hope you manage to fix it.  When you have, I'm happy to continue
helping you with the rc script.

Good luck,

Chris


More information about the freebsd-ports mailing list