我已经按照digitalocean 指南。它使用 systemd 并且应该在启动时启动。
我可以从 cli 启动 redis
sudo systemctl start redis
并且它运行正常,没有任何错误或问题。但是当我重新启动时,redis 无法启动。我尝试了通过谷歌搜索找到的几种方法,但目前都不起作用:
- 设置 Type=forking 或 Type=notify (或者像指南中那样完全不设置)
- 添加 LimitNOFILE=65536 以消除错误(确实如此但仍然无法加载)
journalctl中没有明显的错误:
Lubuntu-16-04 systemd[1]: Starting Redis In-Memory Data Store...
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=799, just started
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # Configuration loaded
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 * supervised by systemd, will signal readiness
Lubuntu-16-04 systemd[1]: Started Redis In-Memory Data Store.
Lubuntu-16-04 systemd[1]: redis.service: Main process exited, code=exited, status=1/FAILURE
Lubuntu-16-04 systemd[1]: redis.service: Control process exited, code=exited status=1
Lubuntu-16-04 systemd[1]: redis.service: Unit entered failed state.
Lubuntu-16-04 systemd[1]: redis.service: Failed with result 'exit-code'.
Lubuntu-16-04 systemd[1]: redis.service: Service hold-off time over, scheduling restart.
Lubuntu-16-04 systemd[1]: Stopped Redis In-Memory Data Store.
该块在日志中重复 5 次,然后在日志末尾出现此消息:
Lubuntu-16-04 systemd[1]: redis.service: Start request repeated too quickly.
Lubuntu-16-04 systemd[1]: Failed to start Redis In-Memory Data Store.
在 redis 日志中我看到以下内容:
Creating Server TCP listening socket 192.168.XX.XXX:6379: bind: Cannot assign requested address
我想允许远程连接,这就是为什么我还绑定到“外部”IP。这会导致 redis 启动失败吗?但手动启动时它可以正常工作。是什么导致了这个问题?
答案1
systemd 配置需要更改,并且我认为它是错误的,如 digitalocean 上显示的。
systemd 单元配置After
目标需要更改:
[Unit]
Description=Redis In-Memory Data Store
After=network-online.target
在指南中,After=network.target
根据本指南意义不大,例如网络可能尚未完全准备好,因此绑定到外部 IP 失败。