#!/bin/sh # Script that starts the ns-slapd server. # Exit status can be: # 0: Server started successfully # 1: Server could not be started # 2: Server already running source @datadir@/@package_name@/data/DSSharedLib # Starts a single instance start_instance() { # The first argument is the server ID. Anything # after that is an argument to ns-slapd. SERV_ID=$1 shift initfile=`get_init_file $initconfig_dir $SERV_ID` || { echo Instance $SERV_ID not found. ; return 1 ; } # source env. for this instance if [ -f $initfile ] ; then . $initfile else echo Instance $SERV_ID not found. return 1 fi prefix="$DS_ROOT" libpath_add "$prefix$SERVER_DIR" libpath_add "$prefix@nss_libdir@" libpath_add "$prefix@libdir@" libpath_add "@nss_libdir@" libpath_add "$prefix@pcre_libdir@" export LD_LIBRARY_PATH SHLIB_PATH=$LD_LIBRARY_PATH export SHLIB_PATH DS_CONFIG_DIR=$CONFIG_DIR export DS_CONFIG_DIR PIDFILE=$RUN_DIR/$PRODUCT_NAME-$SERV_ID.pid STARTPIDFILE=$RUN_DIR/$PRODUCT_NAME-$SERV_ID.startpid if test -f $STARTPIDFILE ; then PID=`cat $STARTPIDFILE` if kill -0 $PID > /dev/null 2>&1 ; then echo There is an ns-slapd process already running: $PID return 2; else rm -f $STARTPIDFILE fi fi if test -f $PIDFILE ; then PID=`cat $PIDFILE` if kill -0 $PID > /dev/null 2>&1 ; then echo There is an ns-slapd running: $PID return 2; else rm -f $PIDFILE fi fi # # Use systemctl if available and running as root, # otherwise start the instance the old way. # if [ -d "@systemdsystemunitdir@" ] && [ "$(id -u)" == "0" ];then @bindir@/systemctl start @package_name@@$SERV_ID.service if [ $? -ne 0 ]; then return 1 fi else cd $SERVERBIN_DIR; ./ns-slapd -D $CONFIG_DIR -i $PIDFILE -w $STARTPIDFILE "$@" if [ $? -ne 0 ]; then return 1 fi fi loop_counter=1 # wait for 10 seconds for the start pid file to appear max_count=${STARTPID_TIME:-10} while test $loop_counter -le $max_count; do loop_counter=`expr $loop_counter + 1` if test ! -f $STARTPIDFILE ; then sleep 1; else PID=`cat $STARTPIDFILE` fi done if test ! -f $STARTPIDFILE ; then echo Server failed to start !!! Please check errors log for problems return 1 fi loop_counter=1 # wait for 10 minutes (600 times 1 seconds) max_count=${PID_TIME:-600} while test $loop_counter -le $max_count; do loop_counter=`expr $loop_counter + 1` if test ! -f $PIDFILE ; then if kill -0 $PID > /dev/null 2>&1 ; then sleep 1 else echo Server failed to start !!! Please check errors log for problems return 1 fi else PID=`cat $PIDFILE` rm -f $STARTPIDFILE return 0; fi done echo Server not running!! Failed to start ns-slapd process. Please check the errors log for problems. return 1 } # source env. for all instances [ -f @initconfigdir@/@package_name@ ] && . @initconfigdir@/@package_name@ while getopts "d:" flag do case "$flag" in d) initconfig_dir="$OPTARG";; esac done shift $(($OPTIND-1)) if [ "$initconfig_dir" = "" ]; then initconfig_dir=@initconfigdir@ fi found=0 if [ "$#" -eq 0 ]; then # We're starting all instances. ret=0 initfiles=`get_initconfig_files $initconfig_dir` || { echo No instances found in $initconfig_dir ; exit 1 ; } for i in $initfiles; do inst=`normalize_server_id $i` echo Starting instance \"$inst\" start_instance $inst rv=$? if [ "$rv" -ne 0 ]; then ret=$rv fi done exit $ret else # We're starting a single instance. start_instance $@ exit $? fi