1#!/bin/sh 2 3### BEGIN INIT INFO 4# Provides: proftpd 5# Required-Start: $remote_fs $syslog $local_fs $network 6# Required-Stop: $remote_fs $syslog $local_fs $network 7# Should-Start: $named 8# Should-Stop: $named 9# Default-Start: 2 3 4 5 10# Default-Stop: 0 1 6 11# Short-Description: Starts ProFTPD daemon 12# Description: This script runs the FTP service offered 13# by the ProFTPD daemon 14### END INIT INFO 15 16# Start the proftpd FTP daemon. 17 18PATH=/bin:/usr/bin:/sbin:/usr/sbin 19DAEMON=/usr/sbin/proftpd 20NAME=proftpd 21 22# Defaults 23RUN="no" 24OPTIONS="" 25CONFIG_FILE=/etc/proftpd.conf 26 27PIDFILE=`grep -i '^pidfile' $CONFIG_FILE|awk '{ print $2 }'` 28if [ "x$PIDFILE" = "x" ]; 29then 30 PIDFILE=/var/run/proftpd.pid 31fi 32 33# Read config (will override defaults) 34[ -r /etc/default/proftpd ] && . /etc/default/proftpd 35 36trap "" 1 37trap "" 15 38 39test -f $DAEMON || exit 0 40 41. /etc/init.d/functions 42 43# 44# Servertype could be inetd|standalone|none. 45# In all cases check against inetd and xinetd support. 46# 47if ! egrep -qi "^[[:space:]]*ServerType.*standalone" $CONFIG_FILE 48then 49 if egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.conf 2>/dev/null || \ 50 egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.d/* 2>/dev/null || \ 51 egrep -qi "^ftp.*/usr/sbin/proftpd" /etc/inetd.conf 2>/dev/null 52 then 53 RUN="no" 54 INETD="yes" 55 else 56 if ! egrep -qi "^[[:space:]]*ServerType.*inetd" $CONFIG_FILE 57 then 58 RUN="yes" 59 INETD="no" 60 else 61 RUN="no" 62 INETD="no" 63 fi 64 fi 65fi 66 67# /var/run could be on a tmpfs 68 69[ ! -d /var/run/proftpd ] && mkdir /var/run/proftpd 70 71inetd_check() 72{ 73 if [ ! -x /usr/sbin/inetd -a ! -x /usr/sbin/xinetd ]; then 74 echo "Neither inetd nor xinetd appears installed: check your configuration." 75 fi 76} 77 78start() 79{ 80 set -e 81 echo -n "Starting ftp server $NAME... " 82 start-stop-daemon --start --quiet --pidfile "$PIDFILE" --oknodo --exec $DAEMON -- -c $CONFIG_FILE $OPTIONS 83 echo "done." 84} 85 86signal() 87{ 88 89 if [ "$1" = "stop" ]; then 90 SIGNAL="TERM" 91 echo -n "Stopping ftp server $NAME... " 92 else 93 if [ "$1" = "reload" ]; then 94 SIGNAL="HUP" 95 echo -n "Reloading ftp server $NAME... " 96 else 97 echo "ERR: wrong parameter given to signal()" 98 exit 1 99 fi 100 fi 101 if [ -f "$PIDFILE" ]; then 102 start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" 103 if [ $? = 0 ]; then 104 echo "done." 105 return 106 else 107 SIGNAL="KILL" 108 start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" 109 if [ $? != 0 ]; then 110 echo 111 [ $2 != 0 ] || exit 0 112 else 113 echo "done." 114 return 115 fi 116 fi 117 if [ "$SIGNAL" = "KILL" ]; then 118 rm -f "$PIDFILE" 119 fi 120 else 121 echo "done." 122 return 123 fi 124} 125 126case "$1" in 127 start) 128 if [ "x$RUN" = "xyes" ] ; then 129 start 130 else 131 if [ "x$INETD" = "xyes" ] ; then 132 echo "ProFTPD is started from inetd/xinetd." 133 inetd_check 134 else 135 echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." 136 fi 137 fi 138 ;; 139 140 force-start) 141 if [ "x$INETD" = "xyes" ] ; then 142 echo "Warning: ProFTPD is started from inetd/xinetd (trying to start anyway)." 143 inetd_check 144 fi 145 start 146 ;; 147 148 stop) 149 if [ "x$RUN" = "xyes" ] ; then 150 signal stop 0 151 else 152 if [ "x$INETD" = "xyes" ] ; then 153 echo "ProFTPD is started from inetd/xinetd." 154 inetd_check 155 else 156 echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." 157 fi 158 fi 159 ;; 160 161 force-stop) 162 if [ "x$INETD" = "xyes" ] ; then 163 echo "Warning: ProFTPD is started from inetd/xinetd (trying to kill anyway)." 164 inetd_check 165 fi 166 signal stop 0 167 ;; 168 169 reload) 170 signal reload 0 171 ;; 172 173 force-reload|restart) 174 if [ "x$RUN" = "xyes" ] ; then 175 signal stop 1 176 sleep 2 177 start 178 else 179 if [ "x$INETD" = "xyes" ] ; then 180 echo "ProFTPD is started from inetd/xinetd." 181 inetd_check 182 else 183 echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration." 184 fi 185 fi 186 ;; 187 188 status) 189 if [ "x$INETD" = "xyes" ] ; then 190 echo "ProFTPD is started from inetd/xinetd." 191 inetd_check 192 exit 0 193 else 194 if [ -f "$PIDFILE" ]; then 195 pid=$(cat $PIDFILE) 196 else 197 pid="x" 198 fi 199 if [ `pidof proftpd|grep "$pid"|wc -l` -ne 0 ] ; then 200 echo "ProFTPD is started in standalone mode, currently running." 201 exit 0 202 else 203 echo "ProFTPD is started in standalone mode, currently not running." 204 exit 3 205 fi 206 fi 207 ;; 208 209 check-config) 210 $DAEMON -t >/dev/null && echo "ProFTPD configuration OK" && exit 0 211 exit 1 212 ;; 213 214 *) 215 echo "Usage: /etc/init.d/$NAME {start|status|force-start|stop|force-stop|reload|restart|force-reload|check-config}" 216 exit 1 217 ;; 218esac 219 220exit 0 221