为什么我的 Systemd 单元 arkos-redis 已加载,但处于非活动状态(死机)?

为什么我的 Systemd 单元 arkos-redis 已加载,但处于非活动状态(死机)?

以下是我的服务文件中的内容arkos-redis.service

GNU nano 2.4.2   File: /usr/lib/systemd/user/arkos-redis.service              

[Unit]
Description=Advanced key-value store

[Service]
ExecStart=/usr/bin/redis-server /etc/arkos/arkos-redis.conf
ExecStop=/usr/bin/redis-cli shutdown

[Install]
WantedBy=default.target

但是启动时我得到以下状态:

[vagrant@arkos-vagrant etc]$ systemctl --user status arkos-redis.service
��arkos-redis.service - Advanced key-value store
   Loaded: loaded (/usr/lib/systemd/user/arkos-redis.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

答案1

因为您的服务文件位于 中/usr/lib/systemd/user,所以它被视为用户服务,并由您自己的实例启动systemd(作为 运行systemd --user)。这意味着,除其他外,该进程是在您的用户(而不是 )下启动的root,并且是为每个登录的用户启动的。根据 中对配置文件的引用/etc,我猜测应该只应该启动该进程的一个实例在任何给定时间运行,并且它应该作为root(或其他一些系统帐户)运行。如果此进程应该以 启动root,请将此文件移动到/usr/lib/systemd/system(或者更好,/etc/systemd/system因为它是您自己的服务文件)并忽略此答案的其余部分。

如果您的服务文件应该在您自己的用户下启动,请注意,只有以下目标在用户模式下可用:

   When systemd runs as a user instance, the following special units are available, which have
   similar definitions as their system counterparts: default.target, shutdown.target,
   sockets.target, timers.target, paths.target, bluetooth.target, printer.target,
   smartcard.target, sound.target.

multi-user.target都不network.target可用,因此您的服务不会自动启动。如果您希望它启动,请更改multi-user.targetdefault.target,然后删除After=network.target。然后,运行systemctl --user enable arkos-redis.service

相关内容