Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Nov 2017 04:04:52 +0100
From:      Polytropon <freebsd@edvax.de>
To:        Edgar Pettijohn <edgar@pettijohn-web.com>
Cc:        Ernie Luzar <luzar722@gmail.com>, Ian Smith <smithi@nimnet.asn.au>, freebsd-questions@freebsd.org
Subject:   Re: Need help with rc.d script
Message-ID:  <20171109040452.d3c25fe2.freebsd@edvax.de>
In-Reply-To: <20171109013818.GA31584@FreeBSD>
References:  <mailman.444.1510052978.1530.freebsd-questions@freebsd.org> <20171108021900.W9710@sola.nimnet.asn.au> <20171108043726.N72828@sola.nimnet.asn.au> <5A01F758.1050706@gmail.com> <20171109005843.E72828@sola.nimnet.asn.au> <5A0332D1.90509@gmail.com> <20171109013818.GA31584@FreeBSD>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 8 Nov 2017 19:42:36 -0600, Edgar Pettijohn wrote:
> On Wed, Nov 08, 2017 at 11:37:37AM -0500, Ernie Luzar wrote:
> > Ian Smith wrote:
> > > On Tue, 7 Nov 2017 13:11:36 -0500, Ernie Luzar wrote:
> > > 
> > >  > Thanks Ian,
> > >  > Ending the while loop with "done &" worked.
> > > 
> > > The one with or without the enclosing ( and ) to force a subshell?
> > > 
> > >  > When I issue dynip from the command line it runs as a daemon but I have to
> > >  > use the kill command to stop it.
> > >  > 
> > >  > This is my rc.d script for dynip script. issuing "service dynip start" works
> > >  > but "service dynip stop" gives message saying
> > >  > dynip not running? (Check /var/run/dynip.pid). Well ps ax shows it is running
> > >  > and I have to use the kill command to stop it.
> > > 
> > > Things to check:
> > > 
> > >  . after 'start' does /var/run/dynip.pid exist while it's running??
> > >  . if so, does it contain the same PID as 'ps ax' shows for dynip?
> > >  . does 'ps ax' show a different PID for the subshell, if there is one?
> > >  . Does /var/run/dynip.pid still exist after running 'stop'?
> > > 
> > > i.e. is the PID needed for kill the same as that in /var/run/dynip.pid?
> > > 
> > >  > Here is my rc.d script. What am I missing to populate the dynip.pid file so
> > >  > "service dynip stop" command will work?
> > >  >
> > >  > #!/bin/sh
> > >  > #
> > >  > #
> > >  > # PROVIDE: dynip
> > >  > # REQUIRE: LOGIN
> > >  > # KEYWORD: nojail shutdown
> > >  > #
> > >  > # Add the following line to /etc/rc.conf to enable dynip:
> > >  > #
> > >  > # dynip_enable="YES"
> > >  > #
> > >  > 
> > >  > . /etc/rc.subr
> > >  > name="dynip"
> > >  > rcvar=dynip_enable
> > >  > command="/usr/local/sbin/${name}"
> > >  > pidfile="/var/run/${name}.pid"
> > >  > load_rc_config ${name}
> > >  > run_rc_command "$1"
> > > 
> > > I've very little knowledge of the detailed behaviour of the rc system.  
> > > Let's see how the above questions might inform before speculating ..
> > > 
> > > cheers, Ian
> > > 
> > 
> > I tested with and without the enclosing ( and ) on the while loop and it 
> > made no difference. No pidfile exists before the "service dynip start" 
> > is issued and non exists afterwards.
> > 
> 
> I don't believe the rc system can write a pidfile for you. Most of if not all
> of the services being started by the rc system are written in c and take care
> of writing their own pidfile. I suspect you could overcome this by writing a c
> program that does so and executes your script every 10 minutes. Or some form of
> pgrep perhaps.

It's easy to create a pidfile from within the shell script for
the shell itself (and its subshells) as well as for an invoked
external program:

	echo $$ > /var/run/${0##*/}.pid
	myprog -foo -bar baz -meow
	echo $! > /var/run/myprog.pid

The documentation says:

     $$      Expands to the process ID of the invoked shell.  A subshell
             retains the same value of $ as its parent.

     $!      Expands to the process ID of the most recent background command
             executed from the current shell.  For a pipeline, the process ID
             is that of the last command in the pipeline.

See "man sh", section "Special Parameters", for details


-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171109040452.d3c25fe2.freebsd>