#!/bin/sh # PROVIDE: sympa # REQUIRE: LOGIN cleanvar %%REQ_MYSQL%% %%REQ_PGSQL%% # KEYWORD: shutdown # Written by Michel Bouissou 20/07/2000 # # Modified by Olivier Salaun 27/07/2000 # - translations # - lang parameter deleted (defined in sympa.conf) # - introduced --VARS-- parsed by Makefile # - no more sympauser since sympa sets its UID # Modified by Michel Bouissou 27/07/2000 # Modified by Eimar Koort 27/02/2013 # - optimized for FreeBSD # # sympa_enable (bool): Set to NO by default. # Set it to YES to enable sympa. # . /etc/rc.subr name=sympa rcvar=sympa_enable load_rc_config $name : ${sympa_enable:=no} start_cmd=sympa_start stop_cmd=sympa_stop status_cmd=sympa_status extra_commands=status sympadir=%%PREFIX%%/libexec/sympa sympaconf=%%ETCDIR%%/sympa.conf echo_opt="-n" sub_status() { # Test syntax. if [ $# = 0 ] ; then echo "Usage: sub_status {program}" return 1 fi # First try "/u1/home/sympa/*.pid" files if [ -f /var/run/sympa/$1.pid ] ; then pid=`head -1 /var/run/sympa/$1.pid | tr -s ' ' '|'` if [ "$pid" != "" ] ; then running=`ps -axw | grep "^[[:space:]]*$pid[[:space:]]"` if [ "$running" != "" ]; then echo "$1 (pid(s) $pid) is active..." return 0 else echo "$1 died, pid file remains." return 1 fi fi fi echo "$1 is stopped." return 3 } sub_module_start() { # Start a module if [ $# = 0 ] ; then echo "Usage: sub_module_start {program}" return 1 fi $sympadir/$1.pl $startparam && echo "success" || echo "failure" } sub_start() { # Test state of module before startup if [ $# = 0 ] ; then echo "Usage: sub_start {program}" return 1 fi sub_status $1 > /dev/null case "$?" in 3) echo $echo_opt "Starting module $1.pl: " sub_module_start $1 ;; 1) echo $echo_opt "Starting $1, overwriting old pid file." sub_module_start $1 ;; 0) echo "$1 seems active. No action will be taken." echo "Try \"sympa status\" or \"sympa restart"\". ;; esac } sub_stop() { # Stop a module if [ $# = 0 ] ; then echo "Usage: sub_stop {program}" return 1 fi if [ -f /var/run/sympa/$1.pid ]; then echo $echo_opt "Stopping module $1.pl: " pids=`head -1 /var/run/sympa/$1.pid` runcount=0 if [ "$pids" != "" ]; then for pid in $pids; do killcount=0 running=`ps -axw | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"` while [ "$running" != "" ]; do if [ $killcount -gt 10 ]; then echo 'failure' return 3 fi kill -TERM $pid >/dev/null 2>&1 running=`ps -axw | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"` if [ "$running" = "" ]; then runcount=`expr $runcount + 1` break fi sleep 2 running=`ps -axw | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"` if [ "$running" = "" ]; then runcount=`expr $runcount + 1` break fi killcount=`expr $killcount + 1` done done fi if [ $runcount -gt 0 ]; then echo 'success' else echo 'died' fi else echo "Module $1.pl not running" fi return 0 } sympa_check_config() { # Check config files [ -d $sympadir ] || exit 0 [ -f $sympaconf ] || exit 0 } sympa_start() { sympa_check_config if [ ! -f /var/spool/lock/sympa ]; then echo "Starting Sympa subsystem: " sub_start sympa_msg sub_start bulk sub_start archived sub_start bounced sub_start task_manager touch /var/spool/lock/sympa else echo "Sympa seems active. No action will be taken." echo "Try \"sympa status\" or \"sympa restart"\". fi } sympa_stop() { sympa_check_config echo "Stopping Sympa subsystem: " sub_stop bounced sub_stop archived sub_stop bulk sub_stop sympa_msg if [ -f /var/run/sympa/sympa-creation.pid ]; then sub_stop sympa-creation fi sub_stop task_manager if [ -f /var/spool/lock/sympa ]; then rm -f /var/spool/lock/sympa fi } sympa_status() { echo "Status of Sympa subsystem: " if [ -f /var/spool/lock/sympa ]; then echo "Status file for subsystem found." else echo "Status file for subsystem NOT found." fi sub_status sympa_msg sub_status bulk sub_status archived sub_status bounced sub_status task_manager } run_rc_command $1