如何让systemd服务开机启动

如何让systemd服务开机启动

我在 XUbuntu 20.04 上安装了 Nix 包管理器。它添加了一项nix-daemon服务。我想nix-daemon在启动时启动该服务。如果我键入以下命令,该服务将运行并正常工作,直到我停止机器,但重新启动后该服务不会运行,我需要再次运行这些命令。

systemd 似乎禁用了该服务或忘记了它已启用。我如何告诉 systemd 启用该服务并使其保持启用状态?

$ sudo systemctl status nix-daemon
Unit nix-daemon.service could not be found.
$ sudo systemctl enable nix-daemon
$ sudo systemctl status nix-daemon
● nix-daemon.service - Nix Daemon
     Loaded: loaded (/nix/store/4vz8sh9ngx34ivi0bw5hlycxdhvy5hvz-nix-2.3.7/lib/systemd/system/nix-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/nix-daemon.service.d
             └─override.conf
     Active: inactive (dead)
TriggeredBy: ● nix-daemon.socket
$ sudo service nix-daemon start
● nix-daemon.service - Nix Daemon
     Loaded: loaded (/nix/store/4vz8sh9ngx34ivi0bw5hlycxdhvy5hvz-nix-2.3.7/lib/systemd/system/nix-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/nix-daemon.service.d
             └─override.conf
     Active: active (running) since Fri 2021-04-16 04:35:15 BST; 2s ago
TriggeredBy: ● nix-daemon.socket
   Main PID: 55329 (nix-daemon)
      Tasks: 5 (limit: 9091)
     Memory: 13.8M
     CGroup: /system.slice/nix-daemon.service
             └─55329 nix-daemon --daemon

Apr 16 04:35:15 wayfire systemd[1]: Started Nix Daemon.
Apr 16 04:35:15 wayfire nix-daemon[55329]: warning: unknown setting 'experimental-features'
Apr 16 04:35:15 wayfire nix-daemon[55329]: warning: unknown setting 'keep-derivarions'

编辑:

安装程序创建的内容/etc/systemd/system/nix-daemon.service(我没有修改它):

[Unit]
Description=Nix Daemon
RequiresMountsFor=/nix/store
RequiresMountsFor=/nix/var
ConditionPathIsReadWrite=/nix/var/nix/daemon-socket

[Service]
ExecStart=@/nix/store/4vz8sh9ngx34ivi0bw5hlycxdhvy5hvz-nix-2.3.7/bin/nix-daemon nix-daemon --daemon
KillMode=process

[Install]
WantedBy=multi-user.target

没有 /etc/default/nix 文件。

$ systemctl get-default
graphical.target

答案1

尽管运行,但服务在启动时无法加载的原因有很多systemctl enable thename.service。就我而言,/etc/systemd/system/nix-daemon.service它是由安装程序创建的(我猜?),并且是/nix/var/nix/profiles/default/lib/systemd/system/nix-daemon.service.我的/nix分区是一个单独的分区,systemd 尝试.service在挂载该分区之前读取该文件(因此无法识别该服务)。journalctl | grep nix-daemon让我能够解决问题。

答案2

让我给你一种方法。第一种:

systemctl get-default

你可能会得到graphical.target。然后将以下行添加到您的服务文件中

[Install]
WantedBy=graphical.target

告诉 systemd,哪个目标启动您的服务。如果您的默认目标不同,请使用它而不是graphical.target(例如multi-user.target,...)。然后重新加载 systemd

sudo systemctl daemon-reload

以确保重新加载服务文件中的更改。之后,服务应该通过重新启动来启动。

相关内容