V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
atuocn
V2EX  ›  Linux

纠正自己对 systemd 的一个错误认知

  •  2
     
  •   atuocn · 2020-04-28 23:20:16 +08:00 · 3308 次点击
    这是一个创建于 1673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    忽然惊喜的发现,自己原来写在 oschina 上的文章,找到入口了。自从它要求绑定手机后,因不想提供手机号,我再也没找到原来的文章。既然失而复得,转几个还有点价值的文章到这里,以免再次丢失。

    原文写于 2014/07/05 12:17


    以前一直以为,systemd 只会到 /etc/systemd/system 读取配置文件。要 enable 某个 service 就是 copy service 的配置文件到 /etc/systemd/system 目录下或者建一个 symlinks 。

    昨天,想在启动时自动执行一个程序,自己写了个 service 文件放到 /etc/systemd/system,发现没起作用。

    看了一下 systemd 的手册

    http://www.freedesktop.org/software/systemd/man/

    其实下面目录都是 systemd 的读取目录。读取的优先次序是从上到下。

    Table 1.  Load path when running in system mode (--system).
    /etc/systemd/system/*
    /run/systemd/system/*
    /usr/lib/systemd/system/*
    
    Table 2.  Load path when running in user mode (--user).                
    $XDG_CONFIG_HOME/systemd/user/*
    $HOME/.config/systemd/user/*
    /etc/systemd/user/*
    /run/systemd/user/*
    /usr/lib/systemd/user/*
    

    既然上面的目录都是 systemd 的读取目录,service 的 enable, disable 是怎么回事呢?/usr/lib/systemd/system/下有所有安装的软件的配置,systemd 如何来确定需要运行那个 unit 呢?

    systemd 的启动项是用 unit 文件来定义的。首先,每个 unit 都有 Requires,Wants 字段配置 unit 间的依赖关系。除 unit 文件定义外,每个 unit 都另外可以有一个配套的 .requires/.wants/ 目录,放到这两个目录里的 unit 会被隐式作为依赖项。

    其次,unit 文件里可以定义一个 install 节,描述该单元 WantsBy,或 RequiresBy 哪个单元。当使用 systemctl enable service 时,就到 WantsBy 的单元的.wants 目录建一个 symlinks 过来。类似的,RequiresBy 也是这样。

    因为 /etc/systemd/system 优先级最高,/etc/systemd/system 目录下建立一些 unit 的.requires 和.wants 目录,然后 systemctl 在 /etc/systemd/system 对应目录下建立 symlinks,就能保证不修改软件的安装文件的情况下,enable service,避免软件包升级时被覆盖。

    最后,系统启动时 systemd 自动读取 default.target 这个 unit,default.target 定义了它的 Requires 和 Wants,然后一路按依赖启动各项服务。

    1 条回复    2020-04-29 08:45:47 +08:00
    CheekiBreeki
        1
    CheekiBreeki  
       2020-04-29 08:45:47 +08:00 via Android
    我的理解就是建立原來的 services 各種軟鏈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5468 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 07:22 · PVG 15:22 · LAX 23:22 · JFK 02:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.