mun*_*ger 15 ubuntu redis systemd systemctl
我已经在 ubuntu 16.04 机器上安装了 redis,如果我运行/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf
它,它会启动并且我可以毫无问题地连接到它。
但是我想使用它来启动它systemctl start redis
,所以我在以下位置创建了以下文件/etc/systemd/system/redis7000.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
并且 redis 配置已supervised systemd
设置
我认为看起来不错,但我收到以下错误:
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Started Redis In-Memory Data Store.
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=21661, just started
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Configuration loaded
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # systemd supervision requested, but NOTIFY_SOCKET not found
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Main process exited, code=exited, status=1/FAILURE
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Unit entered failed state.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Failed with result 'exit-code'.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Service hold-off time over, scheduling restart.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Stopped Redis In-Memory Data Store.
Run Code Online (Sandbox Code Playgroud)
而且我什至不确定这意味着什么,所以有人可以指导我朝着正确的方向前进吗?
Mic*_*ton 22
要在 systemd 下运行 redis,您需要设置supervised systemd
.
查看配置文件:
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised no
Run Code Online (Sandbox Code Playgroud)
需要改为:
supervised systemd
Run Code Online (Sandbox Code Playgroud)
您还可以在命令行上传递它,它会覆盖redis.conf
. 基于红帽的系统可以做到这一点。这也允许在不更改配置文件的情况下手动或从 systemd 运行相同的 redis 实例。
ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd
Run Code Online (Sandbox Code Playgroud)
此外,你还需要告诉systemd认为Redis的会在这种模式下通过设置操作Type=notify
的[Service]
部分。
小智 11
由于缺乏声誉,我无法添加评论,请将此作为对迈克尔汉普斯顿回答的评论。
修改systemd
服务文件时,使用命令systemctl edit redis-server
创建覆盖。在生成的编辑窗口中,键入以下内容:
[Service]
Type=notify
Run Code Online (Sandbox Code Playgroud)
保存退出即可完成安装apt install -f
。
如果您修改 中的服务/lib/systemd/system
,您将在下次更新时丢失这些编辑。
PS:这个问题让我不必因为我刚刚遇到这个问题而挠头太久。
归档时间: |
|
查看次数: |
59643 次 |
最近记录: |