![升级后,Redis 在 OpenSuse Leap 42.1 上无法启动](https://linux22.com/image/671427/%E5%8D%87%E7%BA%A7%E5%90%8E%EF%BC%8CRedis%20%E5%9C%A8%20OpenSuse%20Leap%2042.1%20%E4%B8%8A%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8.png)
我决定将运行 13.2 的机器升级到最新的 Leap 42.1。我启动了该过程,它完成了升级。重启后,除了 redis 服务器服务之外,一切都正常。我无法使用以下命令启动 redis 服务:
# service redis start
状态是:
# service redis status
redis.target - Redis target allowing to start/stop all [email protected] instances at once
Loaded: loaded (/usr/lib/systemd/system/redis.target; static)
Active: active since Fri 2015-11-20 03:47:07 EET; 1s ago
尽管它说它处于“活动”状态,但当我检查该进程是否正在运行时,实际上并非如此:
# ps ax | grep -i redis
20892 pts/0 S+ 0:00 grep -i redis
我启动 redis 服务器的唯一方法是手动运行:
# redis-server /etc/redis/default.conf
它可以顺利启动服务器。
我尝试重新安装 redis 包,并尝试将供应商从“官方”存储库更改为“server:database”存储库。这些方法似乎都无法解决问题。
我的default.conf
文件几乎是“默认”模板,仅更改了这些内容:
daemonize yes #default is no
bind 127.0.0.1 1.2.3.4 #default is 127.0.0.1
服务文件:
/usr/lib/systemd/system/redis.target
[Unit]
Description=Redis target allowing to start/stop all [email protected] instances at once
/usr/lib/systemd/system/[email protected]
[Unit]
Description=Redis
After=network.target
PartOf=redis.target
[Service]
Type=simple
User=redis
Group=redis
PrivateTmp=true
PIDFile=/var/run/redis/%i.pid
ExecStart=/usr/sbin/redis-server /etc/redis/%i.conf
Restart=on-failure
#ExecStart=/usr/sbin/openvpn --daemon --suppress-timestamps --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
#ExecReload=/sbin/killproc -p /var/run/openvpn/%i.pid -HUP /usr/sbin/openvpn
[Install]
WantedBy=multi-user.target redis.target
你知道从 13.2 到 42.1 发生了什么变化吗?为什么服务停止工作了?另外,我似乎不记得我以前是如何列出 redis 的chkconfig
- 升级后它就从那里消失了,尽管我不太确定这是否是问题的一部分。
编辑:这是感谢@Michael Hampton 的日志文件:
9042:signal-handler (1448036091) Received SIGTERM scheduling shutdown...
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.0.4 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 9042
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
9042:M 20 Nov 18:14:51.090 # Server started, Redis version 3.0.4
9042:M 20 Nov 18:14:51.091 * DB loaded from disk: 0.000 seconds
9042:M 20 Nov 18:14:51.091 * The server is now ready to accept connections on port 6379
9042:M 20 Nov 18:14:51.091 # User requested shutdown...
9042:M 20 Nov 18:14:51.091 * Saving the final RDB snapshot before exiting.
9042:M 20 Nov 18:14:51.126 * DB saved on disk
9042:M 20 Nov 18:14:51.126 * Removing the pid file.
9042:M 20 Nov 18:14:51.126 # Redis is now ready to exit, bye bye...
我不知道为什么它会因为“用户请求关闭”而决定自发退出。
答案1
这是一个 systemd 单元,能够实例化具有不同配置的服务器的多个副本。
要使用它,请指定要使用的实例的名称。例如,您现有的配置似乎具有以下名称default
:
systemctl enable redis@default
systemctl start redis@default
您可能需要进行更改,/etc/redis/default.conf
以便它将写入pidfile
systemd 期望的位置。
pidfile /var/run/redis/default.pid
答案2
搜索了一段时间后,我发现需要注释掉daemonize yes
或将其设置为no
。有趣的是,我在 13.2 上使用了相同的配置,并且没有任何问题。
无论如何希望这对任何人都有帮助。