91

我在 nodejs 应用程序中使用 redis 来支持会话。我已经安装了 redis 服务器,当我运行 redis-server 时它可以工作,但是当我关闭终端时,redis 停止并且不起作用。关闭终端后如何保持redis服务器运行?

4

4 回答 4

217

而且,如果您想要一个快速的选项,请运行:redis-server --daemonize yes

于 2015-12-23T13:20:19.673 回答
75

将 Redis 作为守护程序启动的最简单方法是编辑配置文件并更改以下行:

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes

启动时请务必在 redis-server 命令行上提供配置文件。

Redis 发行版中提供了配置文件的示例。

于 2013-02-11T21:51:26.600 回答
36

正如@DidierSpezia 在他的回答中提到的,

daemonize yes在 Redis conf 文件中设置。daemonize yes在 Redis conf 文件中设置,/path/to/redis.conf通常它应该在/etc/.

和 :

然后以 conf 文件作为参数触发 redis-server:

./redis-server /etc/redis.conf

更新demonize您也可以直接运行带有标志 的redis

redis-server --daemonize yes
于 2015-08-19T10:15:14.553 回答
4

接受的答案大多是过时的。虽然这个问题很老,但谷歌仍然排名很高,所以请允许我更正一下。

OP 没有提供任何关于他的设置的细节,但你可以假设它是一个 linux,而且他没有提到容器,所以你也可以假设他在没有容器的情况下运行 redis。

三个细节使接受的答案成为忘记的事情

  • 大多数(流行)发行版默认带有 systemd
  • 大多数(流行的)发行版在其官方存储库中都有 redis
  • 该官方redis包为redis安装systemd服务

所以

  • 它将supervised systemd在其默认配置中
  • 开始:redis 守护进程用sudo systemctl start redis@instanceName你替换“instanceName”的地方。也sudo systemctl enable redis@instanceName用于在启动时自动启动。(顺便说一句,已经忘记了service start和 init 脚本!这些现在比直接调用更不便携systemctl)。
  • 不要设置为,这会干扰 systemd 监督 redis daemonize: yes

Systemd 将监督,重新启动您的 redis,并且您可以为其设置服务依赖关系和服务前提条件,即使对于自定义可执行文件也不是那么难,搜索 systemd 单元文件(您需要大约 10 行配置文件) . 很有可能,你会想要的。

如果三个细节(使 systemd 成为正确答案)没有得到满足/不相关,您很可能正在运行 redis 容器化。对于 docker/podman/etc.,这完全是另一个问题......(内部 linux 中没有 systemd,但您必须(或已经这样做)监督(d)容器守护进程本身)

于 2021-03-31T15:25:29.243 回答