问题描述
今天安装了redis的最新版本 6.2.6(截止文章发布前最新版本), 安装和启用 tls 功能都一切正常,配置文件也没问题,systemctl 启动时 提示了 redis.service: Failed with result 'protocol'.
线上系统版本
root@local-2:/etc/redis/conf# cat /etc/issue
Ubuntu 18.04.5 LTS \n \l
遇事不解,网上搜索
我当时比较懵逼,愣愣的复制错误 前往 google ,点了个 几个类似问题的文章,Daemonization of Redis 6.0 #7217、Redis service is not starting,看完了他们的讨论,我试了一下其中感觉有点用的方法.
1.取消后台运行,前台运行查看错误输出
daemonize yes
--> daemonize no
我修改后重新运行 systemctl start redis,发现它没报任何错误,直接运行了。这搞得我更懵逼了。
2.直接 redis-server redis.conf
运行完毕后,我都只能直呼好家伙,我更懵逼了。
没错,我又运行成了,没有任何错误信息提示,我现在的内心是渴望有错误提示的,但是它没能如我的愿。
解决问题
我试完了上述方法,也重新重启了不知道多少遍redis 服务,它还是提示 redis.service: Failed with result 'protocol'.
我承认我心态有点小崩,但是不虚,还有 systemd的 redsi.service 文件 没排查,其实我内心不太相信这 redis.service 有错误,因为我本地真机 就是这样配置运行的,没有问题。
本地真机
[Unit]
Description=redis
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
ExecStart=/usr/local/bin/redis-server /etc/redis/conf/redis.conf --supervised systemd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
解释一下这个 --supervised systemd , 因为要在 systemd 下运行 redis,您需要设置supervised systemd.还需要通过Type=notify在[Service]section中的设置来告诉systemd redis会在这种模式下运行。
这还是我本地systemd 启动 redis 时 总是 退出时,去搜索的文章.Redis not starting with systemctl
线上服务器
但也就是这个导致了我线上服务器redis 启动不了,现修改完毕后,已经能正常systemd 控制启动
[Unit]
Description=redis
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
# 这个根据配置填写
ExecStop=/usr/bin/redis-cli -p 6379 -a 123456 shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
虽然问题解决了,但是我还是不太清楚为啥 加上 --supervised systemd 就启动不成功。