以下是我的服务文件中的内容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.target
为default.target
,然后删除After=network.target
。然后,运行systemctl --user enable arkos-redis.service
。