Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Dec 2012 21:30:04 +0000
From:      Chris Rees <crees@FreeBSD.org>
To:        Paul Schmehl <pschmehl_lists@tx.rr.com>
Cc:        "freebsd-rc@freebsd.org" <freebsd-rc@freebsd.org>, FreeBSD Ports List <freebsd-ports@freebsd.org>
Subject:   Re: rc.subr questions
Message-ID:  <CADLo83_G2NrCU61MWfQC_Uos=Zp3SHEyrehFBqbLu-SuqCn2dA@mail.gmail.com>
In-Reply-To: <0FC50D96AC60C2D7BEFC786A@utd71538.campus.ad.utdallas.edu>
References:  <DC59D265988CEDF1F3DC5C6D@utd71538.campus.ad.utdallas.edu> <CADLo838ty4_ryGLQo9h5Ze2oA0WXvX3Yc4vV9Ei9HjG0whLkfg@mail.gmail.com> <0FC50D96AC60C2D7BEFC786A@utd71538.campus.ad.utdallas.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On 6 December 2012 21:10, Paul Schmehl <pschmehl_lists@tx.rr.com> wrote:
> --On December 6, 2012 8:45:50 PM +0000 Chris Rees <crees@FreeBSD.org> wrote:
>
>> [CC rc@]
>>
>> On 6 December 2012 20:36, Paul Schmehl <pschmehl_lists@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_agent.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?  You'll need to use daemon(8) to
start it otherwise.

Also, you'll have to fiddle with procname; use %%TCLSH%% in a port and
put SUB_LIST+= TCLSH=${TCLSH} into the Makefile.

(Obviously also change the default to NO as well :)

Chris



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADLo83_G2NrCU61MWfQC_Uos=Zp3SHEyrehFBqbLu-SuqCn2dA>