AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 781175
Accepted
xealits
xealits
Asked: 2024-08-01 09:09:58 +0800 CST2024-08-01 09:09:58 +0800 CST 2024-08-01 09:09:58 +0800 CST

如何获取启动临时 systemd 单元的信息?

  • 772

我想让自定义服务单元依赖于远程文件系统 CVMFS 的挂载点。远程文件系统在 systemd 中有一个奇怪的设置,我并不完全理解。我使用中间服务单元做了一个简单的解决方法,所以它工作正常。但我想了解远程文件系统的单元是如何工作的,以便了解 systemd 中的这种行为。

这是远程文件系统的挂载点单元:

$ systemctl status cvmfs-sft.cern.ch.mount
* cvmfs-sft.cern.ch.mount
     Loaded: loaded
     Active: active (mounted) since Wed 2024-07-31 23:31:49 CEST; 1min 32s ago
      Until: Wed 2024-07-31 23:31:49 CEST; 1min 32s ago
      Where: /cvmfs/sft.cern.ch
       What: cvmfs2

它没有列出单元文件。该单元必须以某种方式动态创建。因此,当我将 添加Requires=cvmfs-sft.cern.ch.mount到我的单元时,它在 Linux 启动过程中失败,并显示以下内容:

localhost systemd[1]: Failed to start A one shot script ...
<hostname> systemd[1]: ....service: Failed to schedule restart job: Unit cvmfs-sft.cern.ch.mount not found.

但是,如果我在启动后启动我的设备,它会正常运行。即,Requires=cvmfs-sft.cern.ch.mount当我以普通用户身份登录时,依赖关系正常工作,服务器已达到多用户目标,cvmfs 已安装并且该设备cvmfs-sft.cern.ch.mount处于活动状态。

我期望的是 cvmfs 安装点有实际的单元文件。远程文件系统需要时间来安装这些安装点,然后我的单元将从那里继续。

根据CVMFS 文档,真正管理这个文件系统的是这个autofs.service。该autofs服务运行挂载点如下:

$ systemctl status autofs
* autofs.service - Automounts filesystems on demand
     Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/autofs.service.d
             `-50-cvmfs.conf
...
     CGroup: /system.slice/autofs.service
             |-3405 /usr/bin/cvmfs2 ... sft.cern.ch /cvmfs/sft.cern.ch
...

我想问的是,在 systemd 中,什么可以创建这样的单元而无需单元文件?如果我有一个 init.d 脚本,systemd总是会将其转换为实际的单元文件,不是吗?在这个特定情况下,单元状态显示What: cvmfs2。这是否意味着cvmfs2使用以下功能systemd.mount?

$ man systemd.mount
...
DESCRIPTION
       ...
       The systemd-mount(1) command allows creating .mount and .automount units
       dynamically and transiently from the command line.

我猜想你需要这种用于安装点的瞬时行为,例如当用户将 USB 驱动器插入计算机等时。但是其他单元类型是否可以瞬时创建,即在没有单元文件的情况下动态创建?

有没有一个好的方法可以找出是什么启动了这样一个临时单元? 就我而言,单元依赖关系没有告诉我任何信息:

$ sudo systemctl list-dependencies cvmfs-sft.cern.ch.mount
cvmfs-sft.cern.ch.mount
* |--.mount
* `-system.slice
$ sudo systemctl list-dependencies --reverse cvmfs-sft.cern.ch.mount
cvmfs-sft.cern.ch.mount

是否有其他systemctl命令可以告诉您更多有关此类瞬态单元的来源的信息?

systemd
  • 1 1 个回答
  • 35 Views

1 个回答

  • Voted
  1. Best Answer
    u1686_grawity
    2024-08-01T15:21:59+08:002024-08-01T15:21:59+08:00

    我想问的是,在 systemd 中什么可以创建这样的单元而不需要单元文件?

    从技术上来说,Systemd 本身。

    就像 systemd 为 libudev 看到的设备生成 .device 单元表示一样,它也会为其 /proc/self/mounts 中可见的每个实际挂载生成 .mount 单元表示,以及为每个活动交换设备生成 .swap 单元表示。

    但这些并不是 systemd 所用的“临时单元”。临时单元源自systemd – 它通过 API 创建(例如通过调用systemd-mount或systemd-run),通常作为临时文件存在于 /run/systemd 中 – 而您看到的这些单元并非如此。它们是源自 systemd 控制之外的某种状态的表示;在这种情况下,它们表示由程序直接与内核对话而不涉及 systemd 的挂载。

    所以,

    有没有一个好的方法可以找出是什么启动了这样一个临时单元? 就我而言,单元依赖关系没有告诉我任何信息:

    该单位根本没有发射。它的存在是实际发射的结果,而不是原因。

    如果我有一个 init.d 脚本,systemd 总是将其转换为实际的单元文件,不是吗?

    是的,尽管在所有当前版本中,该翻译都不是由 systemd 本身完成的(即不是由服务管理器完成);而是由一个单独的“生成器”完成的,该生成器根据 init.d 脚本在 /run/systemd 中写出 .service 文件。

    只有非常旧的 systemd 版本才会真正创建代表 init.d 脚本的虚拟内存 .service 单元,但是它在 10 年前就被删除了。(是的,如果您正在运行 systemd v209,那么它已经有十年历史了!)

    在这个特定情况下,单元状态显示什么:cvmfs2。这是否意味着 cvmfs2 使用 systemd.mount 的以下功能?

    不,这意味着该字符串cvmfs2被指定为挂载的“源”字段。它就是您在mount或 的“SOURCE”列中看到的内容findmnt。

    根据 CVMFS 文档,真正管理此文件系统的是 autofs.service。autofs 服务运行挂载点的方式如下:

    这意味着您可能不需要依赖单个挂载 - 依赖autofs.service整体就足够了。是的,它有点偏离了通常的 systemd 逻辑,但假设 autofs 完成了它应该做的工作,它应该可以工作。

    (我无法立即想到一种定义挂载依赖项的方法,该依赖项会等待该挂载出现。我本来希望它是 Requires+After - 事实上,After=在任何情况下你都希望拥有它 - 但它似乎只适用于设备而不适用于挂载。)

    • 1

相关问题

  • journalctl 中的区分级别

  • 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _

  • systemd:如何在服务启动时运行脚本,而不编辑服务定义

  • 使用 systemd 看门狗支持重新启动应用程序

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve