Hi Stephane, On Tue, Jun 16, 2009 at 06:53:17PM +0200, Stephane Neveu wrote: > > Hi all, > > Here is a "first shot" script for postfix. Tell me if not it's correct > or if something is missing.
Many thanks. Can you please also check the archives. Sometimes in May, I think, Raoul has contributed one. It hasn't been yet applied, because there were some issues not yet fixed. Cheers, Dejan > Regards, > > Stephane Neveu > #!/bin/sh > # > # Description: Manages Postfix Service provided by NTT OSSC as an > # OCF High-Availability resource under Heartbeat/LinuxHA control > # > # This program is free software; you can redistribute it and/or > # modify it under the terms of the GNU General Public License > # as published by the Free Software Foundation; either version 2 > # of the License, or (at your option) any later version. > # > # This program is distributed in the hope that it will be useful, > # but WITHOUT ANY WARRANTY; without even the implied warranty of > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > # GNU General Public License for more details. > # > # You should have received a copy of the GNU General Public License > # along with this program; if not, write to the Free Software > # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > # 02110-1301, USA. > # > #mailto : [email protected] > # > ####################################################################### > # OCF parameters: > # OCF_RESKEY_postfix_bin : Executable file > # OCF_RESKEY_postfix_pidfile: Process id file > # OCF_RESKEY_postfix_port : Port number > # OCF_RESKEY_postfix_user : postfix user > # > # OCF_RESKEY_postfix_bin, OCF_RESKEY_postfix_conf, > OCF_RESKEY_postfix_pidfile > # OCF_RESKEY_postfix_port OCF_RESKEY_postfix_user must be specified. > ############################################################################### > > . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs > > #########INITIALIZATION > HERE################################################### > POSTFIX_BIN="${OCF_RESKEY_postfix_bin-/usr/sbin/postfix}" > POSTFIX_PIDFILE="${OCF_RESKEY_postfix_pidfile-/var/spool/postfix/pid/master.pid}" > POSTFIX_CONFFILE="${OCF_RESKEY_postfix_conffile-/etc/postfix/main.cf}" > POSTFIX_PORT="${OCF_RESKEY_postfix_port-25}" > POSTFIX_USER="${OCF_RESKEY_postfix_user-root}" > POSTFIX_NAME="${OCF_RESKEY_postfix_opts-postfix}" > ############################################################################## > > > usage() > { > cat <<-! > usage: $0 action > > action: > start : start a new POSTFIX instance > > stop : stop the running POSTFIX instance > > status : return the status of POSTFIX, run or down > > monitor : return TRUE if POSTFIX appears to be working. > > meta-data : show meta data message > > validate-all : validate the instance parameters > ! > return $OCF_ERR_ARGS > } > > metadata_postfix() { > cat <<END > <?xml version="1.0"?> > <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > <resource-agent name="postfix"> > <version>1.0</version> > <longdesc lang="en">The OCF resource agent for postfix</longdesc> > <shortdesc lang="en">The RA for postfix</shortdesc> > > <parameters> > > <parameter name="postfix_bin" required="1" unique="0"> > <longdesc lang="en"> > This is a required parameter. This parameter specifies postfix's > bin file > </longdesc> > <shortdesc>Binary</shortdesc> > <content type="string" default=""/> > </parameter> > > <parameter name="postfix_pidfile" required="1" unique="1"> > <longdesc lang="en"> > This is a required parameter. This parameter specifies a process id file > for a postfix instance managed by this RA. > </longdesc> > <shortdesc>Pidfile</shortdesc> > <content type="string" default=""/> > </parameter> > > <parameter name="postfix_port" required="1" unique="1"> > <longdesc lang="en"> > This is a required parameter. This parameter specifies a port number > for a postfix instance managed by this RA. If plural ports are used, > you must specifiy the only one of them. > </longdesc> > <shortdesc>Port number</shortdesc> > <content type="integer" default=""/> > </parameter> > > <parameter name="postfix_user" required="1" unique="1"> > <longdesc lang="en"> > This is a required parameter. This parameter specifies a user > to start the postfix instance managed by this RA. > </longdesc> > <shortdesc>User</shortdesc> > <content type="string" default=""/> > </parameter> > > </parameters> > > <actions> > <action name="start" timeout="20s" /> > <action name="stop" timeout="20s" /> > <action name="status" timeout="30" /> > <action name="monitor" depth="0" timeout="30s" interval="20s" > start-delay="10s" /> > <action name="meta-data" timeout="20s" /> > <action name="validate-all" timeout="20" /> > </actions> > </resource-agent> > END > exit $OCF_SUCCESS > } > > get_pid() > { > POSTFIX_PID=$(netstat -laputen | awk > '/.*[0-9]+\.[0-9]+\.+[0-9]+\.[0-9]+:'$POSTFIX_PORT'[^0-9].*LISTEN/ {print > $9}' | cut -d '/' -f 1) > } > > is_pid_found() > { > get_pid > if [ -n "${POSTFIX_PID}" ] ; then > return $OCF_SUCCESS > else > return 1 > fi > } > > is_postfix_dead() > { > get_pid > if [[ -z "${POSTFIX_PID}" ]] && [[ -f "${POSTFIX_PIDFILE}" ]]; then > return $OCF_SUCCESS > elif [[ -n "${POSTFIX_PID}" ]] && [[ ! -f "${POSTFIX_PIDFILE}" ]]; then > return $OCF_NOT_RUNNING > else > return 1 > fi > > } > > monitor_postfix() > { > get_pid > if is_postfix_dead; then > return $OCF_ERR_GENERIC > elif is_pid_found; then > return $OCF_SUCCESS > else > return $OCF_NOT_RUNNING > fi > } > > start_postfix() > { > typeset status > > monitor_postfix > status=$? > if [[ $status != $OCF_NOT_RUNNING ]]; then > return $status > fi > /usr/bin/newaliases >/dev/null 2>&1 > ocf_run $POSTFIX_BIN start > status=$? > sleep 1 > if [[ $status != $OCF_SUCCESS ]]; then > return $status > fi > > while true; do > get_pid > if is_pid_found; then > return $OCF_SUCCESS > else > ocf_log info "$POSTFIX_BIN:No pid found after start" > fi > done > > return $OCF_ERR_GENERIC > } > > stop_postfix() > { > monitor_postfix > ocf_run $POSTFIX_BIN stop > while true; do > sleep 1 > get_pid > if [ is_postfix_dead != "1" ]; then > rm -f ${POSTFIX_PIDFILE} > return $OCF_SUCCESS > fi > ocf_log info "POSTFIX stopped" > done > > } > > status_postfix() > { > monitor_postfix > return $? > } > > > validate_all_postfix() > { > return $OCF_SUCCESS > } > > > if [ -z "$POSTFIX_BIN" ]; then > ocf_log err "POSTFIX_BIN is not defined" > exit $OCF_ERR_CONFIGURED > fi > if [ ! -x "$POSTFIX_BIN" ]; then > ocf_log err "$POSTFIX_BIN is not found" > exit $OCF_ERR_CONFIGURED > fi > > if [ -z "$POSTFIX_PIDFILE" ]; then > ocf_log err "POSTFIX_PIDFILE is not defined" > exit $OCF_ERR_CONFIGURED > fi > > if [ -z "$POSTFIX_PORT" ]; then > ocf_log err "POSTFIX_PORT is not defined" > exit $OCF_ERR_CONFIGURED > fi > > if [ -z "$POSTFIX_USER" ]; then > ocf_log err "POSTFIX_USER is not defined" > exit $OCF_ERR_CONFIGURED > fi > > > COMMAND=$1 > > case "$COMMAND" in > start) > start_postfix > status=$? > exit $status > ;; > stop) > stop_postfix > status=$? > exit $status > ;; > status) > status_postfix > status=$? > if status; then > ocf_log info "postfix is running" > elif [status -eq 7]; then > ocf_log info "postfix is stopped" > else > ocf_log info "postfix is dead" > fi > ;; > monitor) > monitor_postfix > status=$? > exit $status > ;; > meta-data) > metadata_postfix > ;; > validate-all) > validate_all_postfix > exit $? > ;; > *) > usage > ;; > esac > > > _______________________________________________ > Linux-HA mailing list > [email protected] > http://lists.linux-ha.org/mailman/listinfo/linux-ha > See also: http://linux-ha.org/ReportingProblems _______________________________________________ Linux-HA mailing list [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha See also: http://linux-ha.org/ReportingProblems
