touch redis_course
chmod +x redis_course
chkconfig --add redis_course
chkconfig --list
#!/bin/sh
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /pro filesystem.
# chkconfig:2345 90 10
# description:Redis is a persistent key-value database
# reference : http://blog.sina.com.cn/s/blog_86952de90102wmzf.html
# https://blog.csdn.net/kai_1215/article/details/78111237
# 不知这两段有何作用,也可不用引用
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
export PATH
# 6379 直接用/redis-server 或 /redis-cli
# 6380 | 6381 都拼接 -6380 | -6381 再拼接 /redis-server 或 /redis-cli
EXEC=/usr/local/redis
CLIEXEC=/usr/local/redis
CONF="/redis.conf"
SENTINEL_CONF="/sentinel.conf"
# $1代表的是传进来的第一个参数
startFunction()
{
PID = `lsof -F p -i:$1 -sTCP:LISTEN | cut -b 2-`
# 判断端口是否被占用 [下面启动可以合并,但是为了区分是重启还是正常启动。kill可能会失败,这里可能需要优化]
if [ "$PID" != "" ];then
# 如果端口被占用就杀死进程,重新启动新的进程[可能会出现被占用的端口并不是当前待启动的项目情况,这点需要注意端口自定义使用规则问题]
stopFunction $1
# 判断9379为特殊处理
if [ $1 -eq 6379 ]; then
$EXEC/redis-server $EXEC$CONF && $EXEC/redis-server $EXEC$SENTINEL_CONF --sentinel &
sleep 1
else
$EXEC-$1/redis-server $EXEC-$1$CONF && $EXEC-$1/redis-server $EXEC-$1$SENTINEL_CONF --sentinel &
sleep 1
fi
# 判断上一个是否执行成功
if [ $? -eq 0 ]; then
echo "-----> The $1 port is occupied and the restart is successful <-----"
else
echo "-----> The $1 port is occupied and the restart is failed <-----"
fi
else
# 判断9379为特殊处理
if [ $1 -eq 6379 ]; then
$EXEC/redis-server $EXEC$CONF &
sleep 1
$EXEC/redis-server $EXEC$SENTINEL_CONF --sentinel &
sleep 1
else
$EXEC-$1/redis-server $EXEC-$1$CONF &
sleep 1
$EXEC-$1/redis-server $EXEC-$1$SENTINEL_CONF --sentinel &
sleep 1
fi
# 判断上一个是否执行成功
if [ $? -eq 0 ]; then
echo "-----> The $1 port starting success <-----"
else
echo "-----> The $1 port starting failed <-----"
fi
fi
}
stopFunction()
{
# 杀死redis本身的进程
pId=`lsof -F p -i:$1 -sTCP:LISTEN | cut -b 2-`
# 判断端口是否被占用
if [ "$pId" == "" ];then
echo "-----> The $1 port not started <-----"
else
# 如果端口被占用就杀死进程,重新启动新的进程[可能会出现被占用的端口并不是当前待启动的项目情况,这点需要注意端口自定义使用规则问题]
kill -9 $pId;
# 判断上一个是否执行成功
if [ $? -eq 0 ]; then
echo "-----> The $1 port kills successfully <-----"
else
echo "-----> The $1 port kill failed <-----"
fi
fi
# 杀死redis集群下的进程
jq_pId=`lsof -F p -i:2$1 -sTCP:LISTEN | cut -b 2-`
# 判断端口是否被占用
if [ "$jq_pId" == "" ];then
echo "-----> The 2$1 port not started <-----"
else
# 如果端口被占用就杀死进程,重新启动新的进程[可能会出现被占用的端口并不是当前待启动的项目情况,这点需要注意端口自定义使用规则问题]
kill -9 $jq_pId;
# 判断上一个是否执行成功
if [ $? -eq 0 ]; then
echo "-----> The 2$1 port kills successfully <-----"
else
echo "-----> The 2$1 port kill failed <-----"
fi
fi
}
case "$1" in
start)
if [ "$2" == "" ];then
min=6379
max=6381
while [ $min -le $max ]
do
# https://blog.csdn.net/holandstone/article/details/49818047 感谢这篇博文过滤LISTEN
# echo "=======================>"$min
# View port enabled status
PORT_STATUS=`netstat -an|grep LISTEN|grep :$min`
# Prompt if the port exists
if [ "$PORT_STATUS" == "" ]; then
startFunction $min
# echo "-----> $min Port started successfully <-----"
else
echo "-----> The $min port is running <-----"
fi
# 循环数累加
min=`expr $min + 1`
done
else
# 指定性启动
PORT_STATUS=`netstat -an|grep LISTEN|grep :$2`
# Prompt if the port exists
if [ "$PORT_STATUS" == "" ]; then
startFunction $2
# echo "-----> $2 Port started successfully <-----"
else
echo "-----> The $2 port is running <-----"
fi
fi
;;
stop)
if [ "$2" == "" ];then
min=6379
max=6381
# redis端口全部停止
while [ $min -le $max ]
do
stopFunction $min
min=`expr $min + 1`
done
else
# 指定性端口停止
stopFunction $2
fi
;;
restart)
"$0" stop && "$0" start
;;
*)
echo " ***** Please use start or stop or restart as first argument *** "
echo " -----> start : service redis start [6379|6380|6381] <----- "
echo " -----> stop : service redis stop [6379|6380|6381] <----- "
echo " -----> restart : service redis restart <----- "
;;
esac