我在 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
以确保重新加载服务文件中的更改。之后,服务应该通过重新启动来启动。