summaryrefslogtreecommitdiffstats
path: root/ldap/admin/src/scripts/start-dirsrv.in
blob: d3788be971d43df3d71d3f313019b73891d01c0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/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

# 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

    # source env. for this instance
    if [ -f @initconfigdir@/@package_name@-$SERV_ID ] ; then
        . @initconfigdir@/@package_name@-$SERV_ID
    else
        echo Instance $SERV_ID not found.
        return 1
    fi

    prefix="$DS_ROOT"
    LD_LIBRARY_PATH=$prefix$SERVER_DIR:$prefix@nss_libdir@:$prefix@libdir@:@nss_libdir@:@pcre_libdir@
    export LD_LIBRARY_PATH
    SHLIB_PATH=$prefix$SERVER_DIR:$prefix@nss_libdir@:$prefix@libdir@:@nss_libdir@:@pcre_libdir@
    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
    cd $SERVERBIN_DIR; ./ns-slapd -D $CONFIG_DIR -i $PIDFILE -w $STARTPIDFILE "$@"
    if [ $? -ne 0 ]; then
        return 1
    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@

if [ "$#" -eq 0 ]; then
    # We're starting all instances.
    ret=0
    for i in @initconfigdir@/@package_name@-*; do
        inst=`echo $i | sed -e 's,@initconfigdir@/@package_name@-,,g'`
        echo Starting instance \"$inst\"
        start_instance $inst
        if [ "$?" -ne 0 ]; then
            ret=$?
        fi
    done
    exit $ret
else
    # We're starting a single instance.
    start_instance $*
    exit $?
fi