
openldap status to return 160 for open FD approaching limit (above 95%), return 161 for open FD reaches the limit. Depends-on: https://review.opendev.org/c/starlingx/ha/+/819130 Partial-Bug: 1952126 Change-Id: I27bc46709c74c592a8a6b9505f4f2edac742e1a9 Signed-off-by: Bin Qian <bin.qian@windriver.com>
115 lines
2.7 KiB
Bash
Executable File
115 lines
2.7 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# This is an init script for openembedded
|
|
# Copy it to /etc/init.d/openldap and type
|
|
# > update-rc.d openldap defaults 60
|
|
#
|
|
. /etc/init.d/functions
|
|
|
|
PID_FILE='/var/run/slapd.pid'
|
|
MAX_FD_COUNT=4096
|
|
ALARM_THRESHOLD=3891 # 95 % MAX
|
|
EXIT_APPROACH_LIMIT=160
|
|
EXIT_LIMIT_REACHED=161
|
|
|
|
################################################################################
|
|
# Wait for a process to stop running.
|
|
#
|
|
################################################################################
|
|
function wait_for_proc_stop()
|
|
{
|
|
PROGNAME=$1
|
|
TIMEOUT=${2:-"5"}
|
|
|
|
for I in $(seq 1 $TIMEOUT); do
|
|
PID=$(pidof $PROGNAME 2> /dev/null)
|
|
if [ $? -ne 0 ]; then
|
|
## already dead
|
|
return 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
|
|
slapd=/usr/sbin/slapd
|
|
test -x "$slapd" || exit 0
|
|
|
|
RETVAL=0
|
|
|
|
case "$1" in
|
|
start)
|
|
echo -n "Starting SLAPD: "
|
|
# Bump up the open file limit for created daemons
|
|
ulimit -n $MAX_FD_COUNT
|
|
if [ -f /etc/openldap/schema/cn=config.ldif ]; then
|
|
start-stop-daemon --start --oknodo --quiet --exec $slapd \
|
|
-- -F /etc/openldap/schema/
|
|
RETVAL=$?
|
|
else
|
|
start-stop-daemon --start --oknodo --quiet --exec $slapd
|
|
RETVAL=$?
|
|
fi
|
|
if [ $RETVAL -ne 0 ]; then
|
|
echo "Failed to start SLAPD."
|
|
exit $RETVAL
|
|
fi
|
|
|
|
# we need to start nscd service as part of this openldap
|
|
# init.d script since SM manages this as a service and both
|
|
# daemons should be running on a controller host
|
|
systemctl status nscd.service
|
|
if [ $? -ne 0 ]; then
|
|
echo -n "Starting NSCD: "
|
|
systemctl start nscd.service
|
|
RETVAL=$?
|
|
if [ $RETVAL -ne 0 ]; then
|
|
echo "Failed to start NSCD."
|
|
exit $RETVAL
|
|
fi
|
|
fi
|
|
|
|
echo "."
|
|
;;
|
|
stop)
|
|
echo -n "Stopping NSCD: "
|
|
systemctl stop nscd.service
|
|
rm -f /var/run/nscd/nscd.pid
|
|
|
|
echo -n "Stopping SLAPD: "
|
|
start-stop-daemon --retry 60 --stop --oknodo --quiet --pidfile /var/run/slapd.pid
|
|
RETVAL=$?
|
|
wait_for_proc_stop $slapd 10
|
|
WRETVAL=$?
|
|
while [ $WRETVAL -eq 1 ]; do
|
|
killproc $slapd
|
|
wait_for_proc_stop $slapd 10
|
|
WRETVAL=$?
|
|
done
|
|
rm -f '$PID_FILE'
|
|
echo "."
|
|
;;
|
|
status)
|
|
status $slapd
|
|
[ $? -eq 0 ] || exit $?
|
|
systemctl status nscd.service
|
|
[ $? -eq 0 ] || exit $?
|
|
PID=`cat $PID_FILE`
|
|
FD_PATH="/proc/$PID/fd/"
|
|
FD_CNT=`ls $FD_PATH -l | wc -l`
|
|
[ "$FD_CNT" -lt "$MAX_FD_COUNT" ] || exit $EXIT_LIMIT_REACHED
|
|
[ "$FD_CNT" -lt "$ALARM_THRESHOLD" ] || exit $EXIT_APPROACH_LIMIT
|
|
;;
|
|
restart)
|
|
$0 stop
|
|
$0 start
|
|
;;
|
|
*)
|
|
echo "Usage: /etc/init.d/openldap {start|stop|status|restart}"
|
|
exit 1
|
|
esac
|
|
|
|
exit $RETVAL
|