首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使systemd服务在引导时启动

如何使systemd服务在引导时启动
EN

Unix & Linux用户
提问于 2021-04-16 03:45:54
回答 2查看 7.2K关注 0票数 3

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

看起来,systemd禁用了服务,或者忘记了它已启用。我如何告诉systemd启用服务并使其处于启用状态?

代码语言:javascript
复制
$ sudo systemctl status nix-daemon
Unit nix-daemon.service could not be found.
代码语言:javascript
复制
$ sudo systemctl enable nix-daemon
代码语言:javascript
复制
$ 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
代码语言:javascript
复制
$ 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的内容(我没有修改它):

代码语言:javascript
复制
[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文件。

代码语言:javascript
复制
$ systemctl get-default
graphical.target
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-05-15 19:16:15

尽管运行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允许我解决这个问题。

票数 1
EN

Unix & Linux用户

发布于 2021-04-16 05:26:36

让我给你一个办法。第一类:

代码语言:javascript
复制
systemctl get-default

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

代码语言:javascript
复制
[Install]
WantedBy=graphical.target

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

代码语言:javascript
复制
sudo systemctl daemon-reload

以确保重新加载服务文件中的更改。在此之后,服务应该从重新启动开始。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/645331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档