【发布时间】:2013-01-26 20:02:37
【问题描述】:
我在 nodejs 应用程序中使用 redis 来支持会话。我已经安装了 redis 服务器,当我运行 redis-server 时它可以工作,但是当我关闭终端时,redis 停止并且不起作用。关闭终端后如何保持redis服务器运行?
【问题讨论】:
标签: redis
我在 nodejs 应用程序中使用 redis 来支持会话。我已经安装了 redis 服务器,当我运行 redis-server 时它可以工作,但是当我关闭终端时,redis 停止并且不起作用。关闭终端后如何保持redis服务器运行?
【问题讨论】:
标签: redis
如果您想要一个快速的选项,请运行:redis-server --daemonize yes。
【讨论】:
redis-server &有什么区别?
& 运行它,那么当您退出终端时,服务器进程将被终止。 stackoverflow.com/a/15595391/6263317
nohup redis-server & 与redis-server --daemonize 呢?我的意思是,似乎有一些方法可以在不使用 --daemonize 的情况下实现相同的功能,而且这个选项并不是真正需要的。
将 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 发行版中提供了一个配置文件示例。
【讨论】:
daemonize 选项设置为yes,并试图通过-D FOREGROUND 保持其Docker 容器的活动状态,但它不工作并且容器正在退出。我去掉了这个选项并将daemonize 选项改回no,它起作用了,容器保持活动状态。
正如@DidierSpezia 在他的回答中提到的那样,
在 Redis 配置文件中设置 daemonize yes。
在Redis conf文件中设置daemonize yes/path/to/redis.conf一般
它应该在/etc/。
还有:
然后以conf文件作为参数触发redis-server:
./redis-server /etc/redis.conf
更新
你也可以直接运行带有demonize标志的redis
redis-server --daemonize yes
【讨论】:
接受的答案大多已过时。 虽然这个问题已经过时了,但 Google 的排名仍然很高,所以请允许我更正一下。
OP 没有提供任何关于他的设置的细节,但你可以假设它是一个 linux,而且他没有提到容器,所以你也可以假设他在没有容器的情况下运行 redis。
有三个细节让接受的答案很容易忘记
所以
supervised systemd
sudo systemctl start redis@instanceName 替换“instanceName”的redis 守护程序。还有sudo systemctl enable redis@instanceName 用于在启动时自动启动。 (顺便说一句,忘记 service start 和 init 脚本吧!现在这些脚本的可移植性不如直接调用 systemctl)。daemonize: yes,这会干扰系统监控redis!Systemd 将监督、重新启动您的 redis,并且您可以为其设置服务依赖关系和服务前提条件,即使对于自定义可执行文件也不难,搜索 systemd 单元文件(您需要大约 10 行配置文件)。很有可能,你会想要的。
如果三个细节(使 systemd 成为正确答案)没有得到满足/不相关,您很可能正在运行 redis 容器化。对于 docker/podman/etc.,这完全是另一个问题......(内部 linux 中没有 systemd,但你必须(或已经这样做)监督(d)容器守护进程本身)
【讨论】: