#! /bin/bash
#全局定义参数
PORT=11211
USER=root
MAXCONN=1024
CACHESIZE=64
OPTIONS=""
LOCAL="127.0.0.1"
RETVAL=0
prog="memcached"
#定义$1的参数,例如/etc/init.d/memcached start ,这里的start就是$1参数 创建PID和touch/var/lock/subsys/ ,详解看下面的收缩栏
start () {
echo -n $"Starting $prog: "
memcached -d -p $PORT -u $USER -l $LOCAL-m $CACHESIZE -c $MAXCONN -P /var/run/memcached.pid $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
echo -n $"Stopping $prog: "
kill `cat /var/run/memcached.pid`
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/memcached
rm -f /var/run/memcached.pid
fi
}
restart () {
stop
start
}
# 通过$1来判断参数起的哪个定义
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload}"
exit 1
esac
exit $?
touch /var/lock/subsys/memcached 详解
判断是否有实例正在运行,也相当于判断是否上锁就是判断这个文件在与否,也就隐含了是否上锁。而这个目录的内容并不能表示一定上锁了,因为很多服务在启动脚本里用touch来创建这个加锁文件,在系统结束时该脚本负责清除锁,这本身就不可靠(比如意外失败导致锁文件仍然存在)
所以脚本里一般是结合PID文件(如果有PID文件的话),从PID文件里得到该实例的PID,然后用ps-ef来判断是否存在该PID,从而判断是否真正有这个实例在运行,更加稳妥的方法是用进程通讯了,不过这样的话单单靠脚本就做不到了
所以启动停止重启脚本一般结合了touch /var/lock/subsys/xxx 和 PID来判断
到此一游!