分类:
2008-06-16 16:40:59
vsftpd 自动启动脚本
磁针石
联系方式:
QQ:37391319 gmail and gtalk:
2008-6-16 初稿
# chkconfig: - 60 50 这个地方还不是很理解,待以后了解chkconfig添加的方法。
介绍如下:对应/etc/rc.d/rc#.d中的S##和K##,修改这两个参数,用chkconfig add安装。
/etc/rc.d/init.d/functions 表示调用函数库,后面的daemon,status,killproc等函数都来自这里
/etc/sysconfig/network 用来检查网络配置,只是检查是否有网络配置而已。NETWORKING这个地方一直都没有配置过,莫非是安装系统的时候自动识别到网卡,就修改这个值了?
如果没有网络配置,正常退出。[ ${NETWORKING}
= "no" ] && exit 0
如果没有bin文件存在,正常退出。[ -x /usr/sbin/vsftpd ] || exit 0 。这句写得比较有技巧。
declare -a sites,声明一个数组,数组的内容为:sites=(`ls
/etc/vsftpd/*.conf`),site_count=${#sites[@]}为数组的元素个数。Shell数组的介绍见:http://blog.chinaunix.net/u/24624/showart_469177.html,这个博客还都是自己的心得总结,比较实用,不错。
daemon true这个地方还不是很理解,待以后研究/etc/rc.d/init.d/functions。同样的有killproc,status。
/var/lock/subsys/$prog的作用待考证:的解释如下:很多程序需要判断是否当前已经有一个实例在运行,这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有 xinetd在运行了,否则就是没有,当然程序里面还要有相应的判断措施来真正确定是否有实例在运行。通常与该目录配套的还有/var/run目录,用来 存放对应实例的PID,如果你写脚本的话,会发现这2个目录结合起来可以很方便的判断出许多服务是否在运行,运行的相关信息等等。
#!/bin/bash
#
# vsftpd This shell script takes care of starting and stopping
# standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program \
# that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/sbin/vsftpd ] || exit 0
RETVAL=0
prog="vsftpd"
start() {
# Start daemons.
if [ -d /etc/vsftpd ] ; then
declare -a sites
sites=(`ls /etc/vsftpd/*.conf`)
site_count=${#sites[@]}
index=0
while [ "${index}" -lt "${site_count}" ] ; do
site=`basename ${sites[${index}]} .conf`
echo -n $"Starting $prog for $site: "
( /usr/sbin/vsftpd ${sites[${index}]} &)
daemon true
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
let "index = index + 1"
done
else
RETVAL=1
fi
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL