Minor issue in the stop loop of /opt/lucee/lucee_ctl

Stopping Lucee via /opt/lucee/lucee_ctl stop on my production VPS always takes more than the default 20 second timeout in the script (if [ $COUNT -gt 20 ]), so I changed it to 30 and we’ll see late tonight whether that’s enough. It would be ideal having graceful restarts.

While I was tinkering, I noticed what I think is a minor flaw in how the stop() function is coded (see below). In my opinion findpid should not be at the start of the while loop, but at the bottom after sleep 1.

The first iteration of the loop is wasted because the first call of findpid in the while loop will always set PID_FOUND=1 (unless the process has miraculously shut down in probably at most 1 millisecond). There hasn’t been even the beginning of a real opportunity yet for shutdown.sh to finish its job which started just prior to the while loop.

I’ve moved findpid in my own dev and prod environments and I’ve confirmed it works perfectly in dev, and again will see how it goes in prod tonight.

Next, I would love feedback whether this should be fixed for everyone? Again, I know it’s minor, but I get an adrenaline rush when I discover a hidden issue in something that’s been the de facto standard for many years, even when it’s in my own app!

stop() {
        echo -n " * Shutting down Lucee: "
        findpid
        if [ $PID_FOUND -eq 1 ] ; then
                su -p -s /bin/sh $TOMCAT_OWNER $CATALINA_HOME/bin/shutdown.sh &> /dev/null &
                COUNT=0
                while [ $PID_FOUND -eq 1 ] ; do
                        findpid
                        COUNT=$(($COUNT+1))
                        if [ $COUNT -gt 20 ] ; then
                                break
                        fi
                        echo -n ". "
                        # pause while we wait to try again
                        sleep 1
                done
[...]
1 Like