#!@BASH_SHELL@ # # Resource script for vsftpd # # Description: Manages vsftpd as an OCF resource in # an Active-Passive High Availability setup. # # Author: Michel Rode : vsftpd script # License: GNU General Public License (GPLv2) # # # usage: $0 {start|stop|status|monitor|validate-all|meta-data} # # The "start" arg starts vsftpd. # # The "stop" arg stops it. # # OCF parameters: # OCF_RESKEY_binpath # OCF_RESKEY_conffile # OCF_RESKEY_pidfile # ########################################################################## # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs # Parameter defaults OCF_RESKEY_binpath_default="/usr/sbin/vsftpd" OCF_RESKEY_conffile_default="/etc/vsftpd/vsftpd.conf" OCF_RESKEY_pidfile_default="/var/run/vsftpd.pid" : ${OCF_RESKEY_binpath=${OCF_RESKEY_binpath_default}} : ${OCF_RESKEY_conffile=${OCF_RESKEY_conffile_default}} : ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}} USAGE="Usage: $0 {start|stop|status|monitor|validate-all|meta-data}"; ########################################################################## usage() { echo $USAGE >&2 } meta_data() { cat < 1.0 This script manages vsftpd Manages an vsftpd The vsftpd binary path. For example, "/usr/sbin/vsftpd" Full path to the vsftpd binary The vsftpd configuration file name with full path. For example, "/etc/vsftpd/vsftpd.conf" Configuration file name with full path The vsftpd pidfile with full path. For example, "/var/run/vsftpd.pid" PID file with full path END exit $OCF_SUCCESS } get_pidfile() { PIDFILE=$OCF_RESKEY_pidfile } vsftpd_status() { if [ -n "$PIDFILE" -a -f $PIDFILE ]; then # vsftpd is probably running PID=`cat $PIDFILE` if [ -n "$PID" ]; then if ps -p $PID | grep vsftpd >/dev/null ; then ocf_log info "vsftpd daemon running" return $OCF_SUCCESS else ocf_log info "vsftpd daemon is not running but pid file exists" return $OCF_ERR_GENERIC fi else ocf_log err "PID file empty!" return $OCF_ERR_GENERIC fi fi # vsftpd is not running ocf_log info "vsftpd daemon is not running" return $OCF_NOT_RUNNING } vsftpd_start() { # if vsftpd is running return success vsftpd_status retVal=$? if [ $retVal -eq $OCF_SUCCESS ]; then exit $OCF_SUCCESS elif [ $retVal -ne $OCF_NOT_RUNNING ]; then ocf_log err "Error. Unknown status." exit $OCF_ERR_GENERIC fi if [ -n "$OCF_RESKEY_binpath" ]; then COMMAND="$OCF_RESKEY_binpath" fi if [ -n "$OCF_RESKEY_conffile" ]; then COMMAND="$COMMAND $OCF_RESKEY_conffile" fi $COMMAND; if [ $? -ne 0 ]; then ocf_log err "Error. vsftpd returned error $?." exit $OCF_ERR_GENERIC fi PID=$( pgrep $OCF_RESKEY_binpath ) case $? in 0) ocf_log info "PID file (pid:${PID} at $PIDFILE) created for vsftpd." ocf_log info "Started vsftpd." echo $PID > $PIDFILE exit $OCF_SUCCESS ;; 1) rm -f "$PIDFILE" > /dev/null 2>&1 ocf_log info "$Error getting pid." exit $OCF_ERR_GENERIC ;; *) rm -f "$PIDFILE" > /dev/null 2>&1 ocf_exit_reason "Error encountered detecting pid of vsftpd." exit $OCF_ERR_GENERIC ;; esac } vsftpd_stop() { if vsftpd_status ; then PID=`cat $PIDFILE` if [ -n "$PID" ] ; then kill $PID if [ $? -ne 0 ]; then kill -s KILL $PID if [ $? -ne 0 ]; then ocf_log err "Error. Could not stop vsftpd daemon." return $OCF_ERR_GENERIC fi fi rm $PIDFILE 2>/dev/null fi fi ocf_log info "Stopped vsftpd daemon." exit $OCF_SUCCESS } vsftpd_monitor() { vsftpd_status } vsftpd_validate_all() { check_binary $OCF_RESKEY_binpath if [ -n "$OCF_RESKEY_conffile" -a ! -f "$OCF_RESKEY_conffile" ]; then ocf_log err "Config file $OCF_RESKEY_conffile does not exist." exit $OCF_ERR_ARGS fi return $OCF_SUCCESS } # # Main # if [ $# -ne 1 ]; then usage exit $OCF_ERR_ARGS fi case $1 in start) get_pidfile vsftpd_start ;; stop) get_pidfile vsftpd_stop ;; status) get_pidfile vsftpd_status ;; monitor)get_pidfile vsftpd_monitor ;; validate-all) vsftpd_validate_all ;; meta-data) meta_data ;; usage) usage exit $OCF_SUCCESS ;; *) usage exit $OCF_ERR_UNIMPLEMENTED ;; esac