Background documentationExample: Start Script for a Database (Linux) Locate this document in the navigation structure

 

By using the start script described below, the database and the X server (database communication server) are started automatically when the database computer is started and are stopped automatically when it is shut down.

Note that depending on your operating system, you may have to modify the start script.

Prerequisites

  • You have created the database DEMODB and the DBM operator OLEG with the password MONDAY.

  • You are in a root shell.

Procedure

  1. Save the maxdb start script in the /etc/init.d/ directory.

  2. Change to the /etc/rc3.d/directory.

  3. Create the following symbolic links:

    ln -s ../init.d/maxdb K05maxdb

    ln -s ../init.d/maxdb S18maxdb

maxdb Start Script

#! /bin/sh

# Copyright (c) 2001-2008 SAP AG, Germany.

#

# Author: <maxdb@sap.com>

#

### BEGIN INIT INFO

# Provides: MaxDB

# Required-Start: $remote_fs $syslog

# Required-Stop: $remote_fs $syslog

# Default-Start: 3 5

# Default-Stop: 0 1 2 6

# Description: Start MaxDB communication server.

### END INIT INFO

if [ -f /etc/rc.config ]; then

. /etc/rc.config

fi

# where to find x_server executable (global listener)

IND_PROG_DBROOT=""

if [ -f /etc/opt/sdb ]; then

IND_PROG_DBROOT=`grep '^IndepPrograms=' /etc/opt/sdb | sed 's:IndepPrograms=::g'`

else

exit 5

fi

X_SERVER=$IND_PROG_DBROOT/bin/sdbgloballistener

X_PATH=$IND_PROG_DBROOT/bin

MaxDB_BIN=$X_SERVER

test -x $MaxDB_BIN || exit 5

MaxDB_BIN=$X_PATH/dbmcli

test -x $MaxDB_BIN || exit 5

# find program fuser

FUSER=/bin/fuser

test -x $FUSER || FUSER=/sbin/fuser

test -x $FUSER || FUSER=/usr/sbin/fuser

# Shell functions sourced from /etc/rc.status:

# rc_check check and set local and overall rc status

# rc_status check and set local and overall rc status

# rc_status -v ditto but be verbose in local rc status

# rc_status -v -r ditto and clear the local rc status

# rc_failed set local and overall rc status to failed

# rc_reset clear local rc status (overall remains)

# rc_exit exit appropriate to overall rc status

#. /etc/rc.status

# First reset status of this service

#rc_reset

# Return values acc. to LSB for all commands but status:

# 0 - success

# 1 - misc error

# 2 - invalid or excess args

# 3 - unimplemented feature (e.g. reload)

# 4 - insufficient privilege

# 5 - program not installed

# 6 - program not configured

# 7 - program is not running

#

# Note that starting an already running service, stopping

# or restarting a not-running service as well as the restart

# with force-reload (in case signalling is not supported) are

# considered a success.

RETVAL=1

case "$1" in

start)

echo -n "Starting MaxDB services: "

if [ ! -z "$X_SERVER" ]; then

$X_SERVER start>/dev/null 2>&1

# to enable auto start/stop demodb remove following comments

DBMCLI=$X_PATH/dbmcli

if [ ! -x $DBMCLI ]; then

echo "dbmcli not found" >&2

exit 5

fi

$DBMCLI -d DEMODB << __EOD__ 2>&1 > /dev/null

user_logon OLEG,MONDAY

db_online

__EOD__

_test=`echo $_o | grep ERR`

if [ "$_test" = "" ]; then

echo -n " database DEMODB started"

else

echo "cannot start DEMODB: $_o" >&2

exit 7

fi

RETVAL=0

fi

touch /var/lock/subsys/maxdb

;;

stop)

echo -n "Shutting down MaxDB services: "

if [ ! -z "$X_SERVER" ]; then

# to enable auto start/stop demodb remove following comments

DBMCLI=$X_PATH/dbmcli

if [ ! -x $DBMCLI ]; then

echo "dbmcli not found" >&2

exit 5

fi

_o=`$DBMCLI -d DEMODB << __EOD__ 2>&1

user_logon OLEG,MONDAY

db_offline

__EOD__`

_test=`echo $_o | grep ERR`

if [ "$_test" = "" ]; then

echo -n "database DEMODB stopped"

else

echo "cannot stop DEMODB: $_o" >&2

exit 1

fi

$X_SERVER stop -all > /dev/null 2>&1

RETVAL=0

fi

rm -f /var/lock/subsys/maxdb

;;

status)

if [ ! -z "$X_PATH" ]; then

if [ -x $FUSER ]; then

_o=`$FUSER $IND_PROG_DBROOT/pgm/vserver`

if [ $? -eq 0 ]; then

echo "communication server is running"

# to enable auto start/stop demodb remove following comments

DBMCLI=$X_PATH/dbmcli

if [ ! -x $DBMCLI ]; then

echo "dbmcli not found" >&2

exit 5

fi

_o=`$DBMCLI -d DEMODB << __EOD__

user_logon OLEG,MONDAY

db_state

__EOD__`

_test=`echo $_o | grep ERR`

if [ "$_test" = "" ]; then

_state=`echo $_o | sed s/.*State\ *// | sed s/\ .*//`

echo "database DEMODB is $_state"

else

echo "cannot get state of DEMODB: $_o" >&2

fi

RETVAL=0

else

echo "communication server is not running"

RETVAL=0

fi

else

echo "status unkown - fuser not found" >&2

fi

else

echo "status unkown - x_server not found" >&2

fi

;;

restart)

$0 stop

$0 start

;;

reload)

$0 stop

$0 start

;;

*)

echo "Usage: maxdb {start|stop|status|reload|restart}"

exit 1

;;

esac

exit $RETVAL