[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FW: [Handle-info] Starting and stopping the handle server from Unix rc scripts [SEC=UNCLASSIFIED]



Hi Robert,

I just checked the Linux source, and setsid(8) does exactly what's
required.
Well spotted.

The rc script to start the handle server should contain something like
this:

cd $SVRDIR                      # daemon's working directory
rm -f $LOCKFILE                 # remove stale lock file
su $HANDLEUSER -m -c \
    "setsid $JAVA $MAIN $SVRDIR 0</dev/null 1>>server.log 2>&1 &"

It's essential to redirect all three file descriptors in the setsid(8)
command.

For people who don't have setsid(8), or daemon(8), I have attached
daemonise.c with a Makefile, which will do the same thing.

The extra fork should not be required.  The mechanism used to become a
process group leader and detatch the controlling terminal has evolved a
great deal over the years.  It used to be that two forks were required.
Setsid(8) forks before calling setsid(2), and that is sufficient.

Cheers,

--
Phil


-----Original Message-----
From: Robert Tupelo-Schneck [mailto:schneck@cnri.reston.va.us]
Sent: Saturday, 31 July 2010 12:11 AM
To: Chadwick, Philip
Cc: handle-info@cnri.reston.va.us
Subject: Re: [Handle-info] Starting and stopping the handle server from
Unix rc scripts [SEC=UNCLASSIFIED]

If your Linux has the "setsid" executable, you might find it preferable
to "nohup".

From http://bytes.com/topic/java/answers/528276-subject-detach-daemon :

"A daemon changes its working directory, forks, redirects output streams
to /dev/null, detaches from the controlling terminal by calling
setsid(), and forks again. You'll be hard pressed to accomplish most of
that in Java.  Perhaps what you want is this instead:

$ setsid java MyApp /dev/null 2>&1 &

or

$ ( setsid java MyApp /dev/null 2>&1 & ) &

to get the extra fork."

Robert

On 2010-07-29, at 17:46, Chadwick, Philip wrote:

> Hi Robert,
> 
> Thank you for a very sensible and helpful response.
> 
> Several others have also pointed out that swing is not used in the 
> handle server, and there is no need for a frame buffer.
> 
> I am sure that nohup(1) would avoid most problems arising from sharing

> a controlling terminal with other process, as SIGHUP is the signal you

> would most often see -- when any process group leader did an exit(2).
> However it's still very undesirable to expose a daemon to signals from

> random other processes (which have the right to send any signal they 
> like to process group members).
> 
> I see that Tanuki is well regarded (the Apache foundation "endorse"
it).
> However I can't find documentation on *exactly* what it does, and it 
> also looks to be very heavy weight.
> 
> I will post my start/stop script solution as soon as I have tested it.
> 
> Cheers,
> 
> --
> Phil



------
If you have received this transmission in error please notify us immediately by return e-mail and delete all copies. If this e-mail or any attachments have been sent to you in error, that error does not constitute waiver of any confidentiality, privilege or copyright in respect of information in the e-mail or attachments. 



Please consider the environment before printing this email.

------

Attachment: daemonise.c
Description: daemonise.c

Attachment: Makefile
Description: Makefile