Hi,

I am still waiting for further advice to finish the commit process to your 
repository. ;o)


Achim


Achim Stumpf wrote:
Hi,

What's about the proftpd script? Maybe we could finish that one... ;o)


Thanks,

Achim



Achim Stumpf wrote:
Hi,

Lars Marowsky-Bree wrote:

"start_delay" should not be necessary, unless your start operation is
broken.


I have removed the start_delay.


You also need to do a check_binary on the proftpd binary somewhere prior
to calling this command.


All config files and binaries get checked now.

proftpd_stop()
{
    if proftpd_status ; then
        PID=`head -n 1 $OCF_RESKEY_pidfile`
        if [ ! -z $PID ] ; then
            kill $PID
            if [ $? -ne 0 ]; then
                ocf_log err "Proftpd couldn't be stopped"
                return $OCF_ERR_GENERIC
            fi
        fi
    fi

You need to check afterwards that the process is really gone. kill is
not sufficient; it might send the signal, but if the process is stuck on
IO, it might not stop. I'd also recommend kill -9.


I have adapted some code of the apache ocf script:

proftpd_stop()
{
   if proftpd_status ; then
       PID=`head -n 1 $OCF_RESKEY_pidfile`
       if [ ! -z "$PID" ]; then
           kill $PID > /dev/null 2>&1            if [ $? -eq 0 ]; then
               TRIES=0
while isRunning "$PID" && [ $TRIES -lt 5 ] do
                   sleep 1
                   kill $PID > /dev/null 2>&1
                   ocf_log info "Killing Proftpd PID $PID"
                   TRIES=`expr $TRIES + 1`
               done
               TRIES=0
while isRunning "$PID" && [ $TRIES -lt 3 ] do
                   sleep 1
                   kill -9 $PID > /dev/null 2>&1
                   ocf_log info "Killing Proftpd PID $PID with SIGKILL"
                   TRIES=`expr $TRIES + 1`
               done
               if isRunning "$PID" ; then
                   ocf_log err "Killing Proftpd PID $PID FAILED"
                   exit $OCF_ERR_GENERIC
               fi
           else
               ocf_log err "Killing Proftpd PID $PID FAILED"
               exit $OCF_ERR_GENERIC
           fi
       fi
   fi    exit $OCF_SUCCESS
}

1. kill -15 2. if it is still running try max. 5 times to kill again with kill -15
3. after that if it is still running try 3 times with kill -9

Hope that it meets your needs ;o)

And actually I got the idea to send in the while loop with kill -9 a kill -9 signal to all the child processes as returned by:

ps --no-headers -o pid --ppid $PID

If you like the above code and the idea with kill -9 to the child processes, I will implement that too.

proftpd_monitor()
{
if [ $OCF_CHECK_LEVEL -eq 0 ]; then if proftpd_status ; then
            ocf_log debug "Proftpd monitor succeded"
            return $OCF_SUCCESS
        fi
    else
${OCF_RESKEY_curl_binary} -sS --connect-timeout ${OCF_RESKEY_connect_timeout} --max-time ${OCF_RESKEY_max_time} -u "${OCF_RESKEY_test_user}:${OCF_RESKEY_test_pass}" ftp://localhost/ > /dev/null 2>&1

The curl_binary also needs to be "check_binary"ed somewhere.


done

And you might be managing several proftpd instances, none of which might
bind to "localhost"; I think the URL needs to be configurable.

done


Thanks for your advice. Let's see what is wrong now... ;o)


Achim



_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to