You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Chris Wareham <cw...@visitlondon.com> on 2008/09/09 16:18:31 UTC

Derby init script for Linux / Unix

Hi,

I've searched the FAQ, wiki and Nabble's archive for this list but not
found an example init script for running Derby's Network Server. I have
put together a basic init script, but it has one problem which I am
hoping someone on the list can solve for me. The script works fine when
the server is rebooted, but if I login via ssh and restart Derby with
the init script, my shell hangs when I logout. I guess that even though
I run the init script as root, the Derby process is somehow associated
with my login session and prevents me from successfully logging out. I
don't want to use nohup, as it leaves an annoying log file laying around
- there must be a better solution!

My init script is as follows:

#!/bin/sh

# Starts and stops the derby database

DERBY_HOME=/home/derby
DERBY_USER=derby

derby_start () {
     su -l $DERBY_USER -c "$DERBY_HOME/bin/start_derby > 
$DERBY_HOME/logs/derby.log &"
}

derby_stop () {
     su -l $DERBY_USER -c "$DERBY_HOME/bin/stop_derby > 
$DERBY_HOME/logs/derby.log &"
}

case "$1" in
   start)
     derby_start
     ;;
   stop)
     derby_stop
     ;;
   restart)
     derby_stop
     sleep 5
     derby_start
     ;;
   *)
     echo "Usage: /etc/init.d/derby {start|stop|restart}"
     exit 1
     ;;
esac

exit 0

The start script is as follows:

#!/bin/sh

start_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
$DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl start $@"
eval $start_command

And the stop script is as follows:

#!/bin/sh

stop_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
$DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl shutdown $@"
eval $stop_command

The following relevant entries are in the derby user's shell config:

JAVA_HOME=/usr/java/default
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

DERBY_HOME=$HOME
DERBY_CLASSPATH="$HOME/lib/derbynet.jar:$HOME/lib/derby.jar"
DERBY_OPTS="-Dderby.system.home=$HOME/derby"
export DERBY_HOME DERBY_CLASSPATH DERBY_OPTS
 
Chris Wareham
Senior Software Engineer
Visit London Ltd
6th floor,
2 More London Riverside, London SE1 2RR
 
Tel:  +44 (0)20 7234 5848
Fax: +44 (0)20 7234 5753

 
www.visitlondon.com   
 
   
       Save the date for the Visit London Awards 2008! 
      Thursday 27th November, Royal Albert Hall.

  
 
 
 
 
'Visit London Limited' is registered in England under No.761149;
Registered Office: Visit London, 2 More London Riverside, London SE1 2RR.
 

Visit London is the official visitor organisation for London. Visit London is partly funded by Partnership, the Mayor's London Development Agency and London Councils.
The information contained in this e-mail is confidential and intended for the named recipient(s) only.  If you have received it in error, please notify the sender immediately and then delete the message.  If you are not the intended recipient, you must not use, disclose, copy or distribute this email. The views expressed in this e-mail are those of the individual and not of Visit London. We reserve the right to read and monitor any email or attachment entering or leaving our systems without prior notice.
 
  Please don't print this e-mail unless you really need to.

Re: Derby init script for Linux / Unix

Posted by Chris Wareham <cw...@visitlondon.com>.
Rick Hillegas wrote:
> Hi Chris,
> 
> I don't know whether you have seen the startNetworkServer script which 
> is supplied in the bin directory of Derby distributions. It may do a lot 
> of your work for you. For more information on starting up the network 
> server, please see the section titled "Starting the Network Server" in 
> the Derby Server and Administration Guide: 
> http://db.apache.org/derby/docs/10.4/adminguide/
> 
> Hope this helps,
> -Rick
> 

Hi Rick,

Apart from sourcing derby_common.sh, the startNetworkServer script does
the same as my start script, so the problem I describe would also affect
someone logging in remotely to start Derby with that script.

Regards,

Chris

PS - Apologies for the ridiculously long signature on my emails, it's
      added automatically by my company mail server.

> Chris Wareham wrote:
>> Hi,
>>
>> I've searched the FAQ, wiki and Nabble's archive for this list but not
>> found an example init script for running Derby's Network Server. I have
>> put together a basic init script, but it has one problem which I am
>> hoping someone on the list can solve for me. The script works fine when
>> the server is rebooted, but if I login via ssh and restart Derby with
>> the init script, my shell hangs when I logout. I guess that even though
>> I run the init script as root, the Derby process is somehow associated
>> with my login session and prevents me from successfully logging out. I
>> don't want to use nohup, as it leaves an annoying log file laying around
>> - there must be a better solution!
>>
>> My init script is as follows:
>>
>> #!/bin/sh
>>
>> # Starts and stops the derby database
>>
>> DERBY_HOME=/home/derby
>> DERBY_USER=derby
>>
>> derby_start () {
>>     su -l $DERBY_USER -c "$DERBY_HOME/bin/start_derby > 
>> $DERBY_HOME/logs/derby.log &"
>> }
>>
>> derby_stop () {
>>     su -l $DERBY_USER -c "$DERBY_HOME/bin/stop_derby > 
>> $DERBY_HOME/logs/derby.log &"
>> }
>>
>> case "$1" in
>>   start)
>>     derby_start
>>     ;;
>>   stop)
>>     derby_stop
>>     ;;
>>   restart)
>>     derby_stop
>>     sleep 5
>>     derby_start
>>     ;;
>>   *)
>>     echo "Usage: /etc/init.d/derby {start|stop|restart}"
>>     exit 1
>>     ;;
>> esac
>>
>> exit 0
>>
>> The start script is as follows:
>>
>> #!/bin/sh
>>
>> start_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
>> $DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl start $@"
>> eval $start_command
>>
>> And the stop script is as follows:
>>
>> #!/bin/sh
>>
>> stop_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
>> $DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl shutdown $@"
>> eval $stop_command
>>
>> The following relevant entries are in the derby user's shell config:
>>
>> JAVA_HOME=/usr/java/default
>> PATH=$PATH:$JAVA_HOME/bin
>> export JAVA_HOME PATH
>>
>> DERBY_HOME=$HOME
>> DERBY_CLASSPATH="$HOME/lib/derbynet.jar:$HOME/lib/derby.jar"
>> DERBY_OPTS="-Dderby.system.home=$HOME/derby"
>> export DERBY_HOME DERBY_CLASSPATH DERBY_OPTS
>>
 
Chris Wareham
Senior Software Engineer
Visit London Ltd
6th floor,
2 More London Riverside, London SE1 2RR
 
Tel:  +44 (0)20 7234 5848
Fax: +44 (0)20 7234 5753

 
www.visitlondon.com   
 
   
       Save the date for the Visit London Awards 2008! 
      Thursday 27th November, Royal Albert Hall.

  
 
 
 
 
'Visit London Limited' is registered in England under No.761149;
Registered Office: Visit London, 2 More London Riverside, London SE1 2RR.
 

Visit London is the official visitor organisation for London. Visit London is partly funded by Partnership, the Mayor's London Development Agency and London Councils.
The information contained in this e-mail is confidential and intended for the named recipient(s) only.  If you have received it in error, please notify the sender immediately and then delete the message.  If you are not the intended recipient, you must not use, disclose, copy or distribute this email. The views expressed in this e-mail are those of the individual and not of Visit London. We reserve the right to read and monitor any email or attachment entering or leaving our systems without prior notice.
 
  Please don't print this e-mail unless you really need to.

Re: Derby init script for Linux / Unix

Posted by Rick Hillegas <Ri...@Sun.COM>.
Hi Chris,

I don't know whether you have seen the startNetworkServer script which 
is supplied in the bin directory of Derby distributions. It may do a lot 
of your work for you. For more information on starting up the network 
server, please see the section titled "Starting the Network Server" in 
the Derby Server and Administration Guide: 
http://db.apache.org/derby/docs/10.4/adminguide/

Hope this helps,
-Rick

Chris Wareham wrote:
> Hi,
>
> I've searched the FAQ, wiki and Nabble's archive for this list but not
> found an example init script for running Derby's Network Server. I have
> put together a basic init script, but it has one problem which I am
> hoping someone on the list can solve for me. The script works fine when
> the server is rebooted, but if I login via ssh and restart Derby with
> the init script, my shell hangs when I logout. I guess that even though
> I run the init script as root, the Derby process is somehow associated
> with my login session and prevents me from successfully logging out. I
> don't want to use nohup, as it leaves an annoying log file laying around
> - there must be a better solution!
>
> My init script is as follows:
>
> #!/bin/sh
>
> # Starts and stops the derby database
>
> DERBY_HOME=/home/derby
> DERBY_USER=derby
>
> derby_start () {
>     su -l $DERBY_USER -c "$DERBY_HOME/bin/start_derby > 
> $DERBY_HOME/logs/derby.log &"
> }
>
> derby_stop () {
>     su -l $DERBY_USER -c "$DERBY_HOME/bin/stop_derby > 
> $DERBY_HOME/logs/derby.log &"
> }
>
> case "$1" in
>   start)
>     derby_start
>     ;;
>   stop)
>     derby_stop
>     ;;
>   restart)
>     derby_stop
>     sleep 5
>     derby_start
>     ;;
>   *)
>     echo "Usage: /etc/init.d/derby {start|stop|restart}"
>     exit 1
>     ;;
> esac
>
> exit 0
>
> The start script is as follows:
>
> #!/bin/sh
>
> start_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
> $DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl start $@"
> eval $start_command
>
> And the stop script is as follows:
>
> #!/bin/sh
>
> stop_command="exec $JAVA_HOME/bin/java $DERBY_OPTS -classpath 
> $DERBY_CLASSPATH org.apache.derby.drda.NetworkServerControl shutdown $@"
> eval $stop_command
>
> The following relevant entries are in the derby user's shell config:
>
> JAVA_HOME=/usr/java/default
> PATH=$PATH:$JAVA_HOME/bin
> export JAVA_HOME PATH
>
> DERBY_HOME=$HOME
> DERBY_CLASSPATH="$HOME/lib/derbynet.jar:$HOME/lib/derby.jar"
> DERBY_OPTS="-Dderby.system.home=$HOME/derby"
> export DERBY_HOME DERBY_CLASSPATH DERBY_OPTS
>
> Chris Wareham
> Senior Software Engineer
> Visit London Ltd
> 6th floor,
> 2 More London Riverside, London SE1 2RR
>
> Tel:  +44 (0)20 7234 5848
> Fax: +44 (0)20 7234 5753
>
>
> www.visitlondon.com  
>         Save the date for the Visit London Awards 2008!      Thursday 
> 27th November, Royal Albert Hall.
>
>  
>
>
>
>
> 'Visit London Limited' is registered in England under No.761149;
> Registered Office: Visit London, 2 More London Riverside, London SE1 2RR.
>
>
> Visit London is the official visitor organisation for London. Visit 
> London is partly funded by Partnership, the Mayor's London Development 
> Agency and London Councils.
> The information contained in this e-mail is confidential and intended 
> for the named recipient(s) only.  If you have received it in error, 
> please notify the sender immediately and then delete the message.  If 
> you are not the intended recipient, you must not use, disclose, copy 
> or distribute this email. The views expressed in this e-mail are those 
> of the individual and not of Visit London. We reserve the right to 
> read and monitor any email or attachment entering or leaving our 
> systems without prior notice.
>
>  Please don't print this e-mail unless you really need to.


Re: Derby init script for Linux / Unix (SOLVED)

Posted by Chris Wareham <cw...@visitlondon.com>.
Still not sure if this is a manifestation of the ssh hang-on-exit bug,
but redirecting stderr to a file as well as stdout solves the problem.
It's probably a good idea not to overwrite that file when shutting down,
so with both changes the init script becomes:

#!/bin/sh

# Starts and stops the derby database

DERBY_HOME=/home/web
DERBY_USER=web

derby_start () {
     su -l $DERBY_USER -c "$DERBY_HOME/bin/start_derby > 
$DERBY_HOME/logs/derby.log 2>&1 &"
}

derby_stop () {
     su -l $DERBY_USER -c "$DERBY_HOME/bin/stop_derby"
}

case "$1" in
   start)
     derby_start
     ;;
   stop)
     derby_stop
     ;;
   restart)
     derby_stop
     sleep 5
     derby_start
     ;;
   *)
     echo "Usage: /etc/init.d/derby {start|stop|restart}"
     exit 1
     ;;
esac

exit 0
 
Chris Wareham
Senior Software Engineer
Visit London Ltd
6th floor,
2 More London Riverside, London SE1 2RR
 
Tel:  +44 (0)20 7234 5848
Fax: +44 (0)20 7234 5753

 
www.visitlondon.com   
 
   
       Save the date for the Visit London Awards 2008! 
      Thursday 27th November, Royal Albert Hall.

  
 
 
 
 
'Visit London Limited' is registered in England under No.761149;
Registered Office: Visit London, 2 More London Riverside, London SE1 2RR.
 

Visit London is the official visitor organisation for London. Visit London is partly funded by Partnership, the Mayor's London Development Agency and London Councils.
The information contained in this e-mail is confidential and intended for the named recipient(s) only.  If you have received it in error, please notify the sender immediately and then delete the message.  If you are not the intended recipient, you must not use, disclose, copy or distribute this email. The views expressed in this e-mail are those of the individual and not of Visit London. We reserve the right to read and monitor any email or attachment entering or leaving our systems without prior notice.
 
  Please don't print this e-mail unless you really need to.

Re: Derby init script for Linux / Unix

Posted by Chris Wareham <cw...@visitlondon.com>.
Chris Wareham wrote:
> Hi,
> 
> I've searched the FAQ, wiki and Nabble's archive for this list but not
> found an example init script for running Derby's Network Server. I have
> put together a basic init script, but it has one problem which I am
> hoping someone on the list can solve for me. The script works fine when
> the server is rebooted, but if I login via ssh and restart Derby with
> the init script, my shell hangs when I logout. I guess that even though
> I run the init script as root, the Derby process is somehow associated
> with my login session and prevents me from successfully logging out. I
> don't want to use nohup, as it leaves an annoying log file laying around
> - there must be a better solution!
> 

It's possible this is related to the old SSH hang-on-exit bug:

https://bugzilla.mindrot.org/show_bug.cgi?id=52

However, adding the following to my shell config results in the Derby
process terminating when I close my remote session:

shopt -s huponexit
 
Chris Wareham
Senior Software Engineer
Visit London Ltd
6th floor,
2 More London Riverside, London SE1 2RR
 
Tel:  +44 (0)20 7234 5848
Fax: +44 (0)20 7234 5753

 
www.visitlondon.com   
 
   
       Save the date for the Visit London Awards 2008! 
      Thursday 27th November, Royal Albert Hall.

  
 
 
 
 
'Visit London Limited' is registered in England under No.761149;
Registered Office: Visit London, 2 More London Riverside, London SE1 2RR.
 

Visit London is the official visitor organisation for London. Visit London is partly funded by Partnership, the Mayor's London Development Agency and London Councils.
The information contained in this e-mail is confidential and intended for the named recipient(s) only.  If you have received it in error, please notify the sender immediately and then delete the message.  If you are not the intended recipient, you must not use, disclose, copy or distribute this email. The views expressed in this e-mail are those of the individual and not of Visit London. We reserve the right to read and monitor any email or attachment entering or leaving our systems without prior notice.
 
  Please don't print this e-mail unless you really need to.