centos7 Redis 设置开机启动 systemctl 启动 Redis 失败

IT小君   2021-01-05T22:18:18

错误提示如下:

systemd[1]: redis.service start operation timed out. Terminating.
redis-server[19424]: 19424:signal-handler (1609851011) Received SIGTERM scheduling shutdown...
redis-server[19424]: 19424:M 05 Jan 2021 20:50:11.767 # User requested shutdown...
redis-server[19424]: 19424:M 05 Jan 2021 20:50:11.767 * Saving the final RDB snapshot before exiting.
redis-server[19424]: 19424:M 05 Jan 2021 20:50:11.792 * DB saved on disk
redis-server[19424]: 19424:M 05 Jan 2021 20:50:11.792 * Removing the pid file.
redis-server[19424]: 19424:M 05 Jan 2021 20:50:11.792 # Redis is now ready to exit, bye bye...


点击广告,支持我们为你提供更好的服务
评论(1)
IT小君
看了下 service 文件,发现 Systemd 启动命令如下

ExecStart=/usr/sbin/redis-server /etc/redis.conf
手动运行这条命令,发现是正常的,所以猜想是 service 文件的问题,后来发现只需要把 [Service] 部分的 Type=forking 注释掉就行了。

[Service]
# Type=forking
# PIDFile=/var/run/redis/redis.pid
ExecStart=/usr/sbin/redis-server /etc/redis.conf
User=redis
Group=redis
之后重新加载 Service 文件并启动 Redis 服务

sudo systemctl daemon-reload
sudo systemctl start redis
Man pages 对 Systemd 服务启动类型 Type 的解释如下

If set to forking, it is expected that the process configured with ExecStart= will call fork() as part of its start-up. The parent process is expected to exit when start-up is complete and all communication channels are set up. The child continues to run as the main daemon process. This is the behavior of traditional UNIX daemons. If this setting is used, it is recommended to also use the PIDFile= option, so that systemd can identify the main process of the daemon. systemd will proceed with starting follow-up units as soon as the parent process exits.
因为 Redis 配置文件里配置的是
daemonize off
2021-01-05T22:19:47   回复