使用前配置
本脚本适用于通过源码编译方式安装在 /usr/local/redis 目录下的 Redis 服务。在使用前,你需要根据自己服务器的实际部署情况,调整脚本开头的几个变量值。
核心变量配置:
REDIS_PATH: Redis 的安装根目录。
REDIS_PORT: Redis 服务监听的端口,默认为 6379。
REDIS_CONF: Redis 配置文件 redis.conf 的绝对路径。
REDIS_SERVER: redis-server 可执行文件的路径。
REDIS_CLI: redis-cli 可执行文件的路径。
REDIS_LOG: Redis 的日志文件路径,需与 redis.conf 中的 logfile 配置一致。
依赖检查:
脚本通过 lsof 命令根据端口号查找进程 PID 以判断服务状态。请确保系统已安装此工具。
- CentOS/RHEL:
sudo yum install -y lsof
- Ubuntu/Debian:
sudo apt install -y lsof
脚本功能与使用
将以下脚本保存为 redis.sh,并赋予执行权限 (chmod +x redis.sh),即可通过简单的命令参数来管理你的 Redis 服务。
#!/bin/bash
# ----- Redis 服务管理脚本 -----
# 适用于安装在 /usr/local/redis/ 的 Redis 服务
# 需要根据实际情况修改路径和端口
REDIS_PATH="/usr/local/redis"
REDIS_PORT="6379"
REDIS_CONF="${REDIS_PATH}/redis.conf"
REDIS_SERVER="/usr/local/bin/redis-server"
REDIS_CLI="/usr/local/bin/redis-cli"
REDIS_LOG="/data/redis/redis.log"
# 帮助信息
show_help() {
echo "Redis 服务管理脚本 - 用于管理安装在 ${REDIS_PATH} 的 Redis 服务"
echo "用法: $0 [选项]"
echo "选项:"
echo " start 启动服务"
echo " stop 停止服务"
echo " restart 重启服务"
echo " status 查看状态"
echo " log 实时查看日志"
echo " help 显示此帮助信息"
}
# 检查 Redis 状态
status_redis() {
if ! command -v lsof &> /dev/null; then
echo "错误:lsof 未安装,请先安装 lsof 工具 (sudo yum install lsof 或 sudo apt install lsof)"
return 1
fi
PID=$(/usr/bin/lsof -t -i ":${REDIS_PORT}" -s TCP:LISTEN 2>/dev/null)
if [ -n "${PID}" ] && kill -0 "${PID}" 2>/dev/null; then
echo "服务状态:运行中 (PID: ${PID})"
return 0
else
echo "服务状态:已停止"
return 1
fi
}
# 启动 Redis 服务
start_redis() {
status_redis >/dev/null 2>&1
[ $? -eq 0 ] && echo "服务已在运行中" && return 0
echo "正在启动 Redis 服务..."
${REDIS_SERVER} "${REDIS_CONF}" >/dev/null 2>&1 &
sleep 1 # 等待服务启动
status_redis >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Redis 启动成功"
return 0
else
echo "错误:Redis 启动失败,请检查日志: ${REDIS_LOG}"
return 1
fi
}
# 停止 Redis 服务
stop_redis() {
status_redis >/dev/null 2>&1
[ $? -ne 0 ] && echo "服务未运行" && return 0
echo "正在停止 Redis 服务..."
if ${REDIS_CLI} -p "${REDIS_PORT}" shutdown save >/dev/null 2>&1; then
sleep 2
status_redis >/dev/null 2>&1
[ $? -ne 0 ] && echo "Redis 已停止" && return 0
fi
# 优雅停止失败时强制终止
PID=$(/usr/bin/lsof -t -i ":${REDIS_PORT}" -s TCP:LISTEN 2>/dev/null)
if [ -n "${PID}" ]; then
echo "警告:优雅停止失败,尝试强制终止 (PID: ${PID})"
kill -9 "${PID}" 2>/dev/null
sleep 1
[ ! -d "/proc/${PID}" ] && echo "服务已强制终止" && return 0
fi
echo "错误:停止服务失败,请手动检查"
return 1
}
# 重启 Redis 服务
restart_redis() {
stop_redis
[ $? -eq 0 ] && sleep 3 && start_redis
}
# 查看实时日志
log_redis() {
if [ ! -f "${REDIS_LOG}" ]; then
echo "错误:日志文件不存在: ${REDIS_LOG}"
echo "提示:请检查 redis.conf 中的 logfile 配置"
return 1
fi
echo "正在跟踪日志文件: ${REDIS_LOG} (按 Ctrl+C 退出)"
tail -f "${REDIS_LOG}"
}
# 主函数
main() {
case "$1" in
start | "")
start_redis
;;
stop)
stop_redis
;;
restart)
restart_redis
;;
status)
status_redis
;;
log)
log_redis
;;
help)
show_help
;;
*)
echo "无效选项: $1"
show_help
exit 1
;;
esac
}
# 检查 Redis 可执行文件是否存在
check_prerequisites() {
[ ! -f "${REDIS_SERVER}" ] && echo "错误:redis-server 不存在: ${REDIS_SERVER}" && exit 1
[ ! -f "${REDIS_CLI}" ] && echo "错误:redis-cli 不存在: ${REDIS_CLI}" && exit 1
[ ! -f "${REDIS_CONF}" ] && echo "错误:配置文件不存在: ${REDIS_CONF}" && exit 1
#[ ! -f "${REDIS_LOG}" ] && echo "错误:日志文件不存在: ${REDIS_LOG}" && exit 1
}
check_prerequisites
main "$@"
命令详解
执行脚本时,需要带上相应的功能参数:
./redis.sh help
输出脚本的帮助信息,展示所有可用命令。
./redis.sh status
检查 Redis 服务的运行状态。该功能依赖于 lsof 这个强大的 运维 工具来查询指定端口的监听进程。
./redis.sh start
启动 Redis 服务。如果服务已经在运行,会有相应提示。
./redis.sh stop
停止 Redis 服务。脚本会优先尝试通过 redis-cli shutdown 进行优雅停止,保存数据。如果失败,则会自动尝试强制终止进程。
./redis.sh restart
重启 Redis 服务,相当于依次执行 stop 和 start。
./redis.sh log
实时查看 Redis 的日志输出,方便排查问题。使用 Ctrl+C 键退出日志跟踪模式。
提示:直接运行 ./redis.sh 不跟任何参数,默认执行启动 (start) 操作。
|