问题描述

今天安装了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 #7217Redis 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 就启动不成功。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐