Bin Qian 940eb07423 report open-ldap service is approaching or reaching FD limit
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>
2021-11-26 13:24:31 -05:00

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