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 / 问题 / 698278
Accepted
kimaNO
kimaNO
Asked: 2022-04-07 15:19:41 +0800 CST2022-04-07 15:19:41 +0800 CST 2022-04-07 15:19:41 +0800 CST

systemd 服务的自定义位置

  • 772

有没有办法告诉systemd在某些路径中搜索服务文件?

作为此手册页状态,搜索路径是在编译时确定的。所以我尝试XDG_DATA_DIRS在/etc/systemd/user.conf

Environment="XDG_DATA_DIRS=/custom/path/lib" 

但它不起作用。

PS:我的服务是通过DBus激活的。

arch-linux systemd
  • 2 2 个回答
  • 358 Views

2 个回答

  • Voted
  1. edmundoferreira
    2022-04-07T23:22:55+08:002022-04-07T23:22:55+08:00

    我相信您必须将其设置为$XDG_DATA_DIR没有 bashrc/profile.d 环境变量,而是设置为 systemd 环境变量。

    我相信systemd.environment-generator的第一个示例可以满足您的要求。我在下面复制了它以供快速参考:

    # 50-xdg-data-dirs.sh
    
    #!/bin/sh
    # SPDX-License-Identifier: CC0-1.0
    
    # set the default value
    XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}"
    
    # add a directory if it exists
    if [ -d /opt/foo/share ]; then
        XDG_DATA_DIRS="/opt/foo/share:${XDG_DATA_DIRS}"
    fi
    
    # write our output
    echo "XDG_DATA_DIRS=${XDG_DATA_DIRS}"
    

    另一种可能性是在每个服务文件中或每个服务文件中的文件中定义 systemd 变量,如.conf其他SO中所述/etc/systemd/system.conf.d/

    • 0
  2. Best Answer
    Stewart
    2022-04-09T02:25:27+08:002022-04-09T02:25:27+08:00

    --system 总线

    systemd--system总线是使用 systemd 的“正常”方式。它是系统范围的总线,以root. 将总线的man systemd.unit负载路径描述为:--system

    /etc/systemd/system.control
    /run/systemd/system.control
    /run/systemd/transient
    /run/systemd/generator.early
    /etc/systemd/system          <-- local units usually go here
    /run/systemd/system
    /run/systemd/generator
    /usr/local/lib/systemd/system
    /lib/systemd/system          <-- packaged units usually go here
    /run/systemd/generator.late
    

    该手册页还说:

    设置变量时$SYSTEMD_UNIT_PATH,此变量的内容会覆盖单位负载路径。如果$SYSTEMD_UNIT_PATH以空组件(“:”)结尾,通常的单元加载路径将附加到变量的内容

    将此变量设置为SYSTEMD_UNIT_PATH=/my/path/:将添加/my/path到加载路径的前面。但是,我们不能简单地从命令行运行它,因为 systemd 已经在运行

    SYSTEMD_UNIT_PATH=/my/path: systemd
    

    要设置systemd --system总线的环境,我们需要查看man systemd-system.conf. 然后在这些文件中设置值以影响系统总线:

    /etc/systemd/system.conf
    /etc/systemd/system.conf.d/*.conf   <-- Install your change here
    /run/systemd/system.conf.d/*.conf
    /lib/systemd/system.conf.d/*.conf
    

    关于在此配置中放置的内容,手册页描述:

    ManagerEnvironment=
        Takes the same arguments as DefaultEnvironment=, see above. Sets 
        environment variables just for the manager process itself. In contrast 
        to user managers, these variables are not inherited by processes spawned 
        by the system manager, use DefaultEnvironment= for that. Note that these
        variables are merged into the existing environment block. In particular, 
        in case of the system manager, this includes variables set by the kernel 
        based on the kernel command line.
    

    因此将此文件安装为/etc/systemd/system.conf.d/mypath.conf:

    [Manager]
    ManagerEnvironment="SYSTEMD_UNIT_PATH=/my/path:"
    

    免责声明:虽然在我的机器上的版本 250.4 中有SYSTEMD_UNIT_PATH记录,但这里没有记录。这可能意味着他们正在弃用该功能。如果您的机器的手册页中没有描述,那么它还没有(或不再)受支持。在这种情况下,唯一的选择是在每个单元存在的任何位置创建符号链接。man systemd.unitSYSTEMD_UNIT_PATH/etc/systemd/system/

    --user 总线

    systemd--user总线是为每个登录的用户运行的东西。它对于用户备份、用户挂载、启动 GUI 或其他桌面环境的东西(如 VNC 服务器)很有用。要管理此总线上的单元,请运行systemctl --user {start,stop} ...(不带sudo)。 将总线的man systemd.unit负载路径描述为:--user

    $XDG_CONFIG_HOME/.config/systemd/user.control
    $XDG_RUNTIME_DIR/systemd/user.control
    /run/systemd/transient
    /run/systemd/generator.early
    $XDG_CONFIG_HOME/.config/systemd/user or $HOME/.config/systemd/user
    $XDG_CONFIG_DIRS/.config/systemd/user or /etc/xdg/systemd/user
    /etc/systemd/user
    $XDG_RUNTIME_DIR/systemd/user
    /run/systemd/user
    $XDG_RUNTIME_DIR/systemd/generator
    $XDG_DATA_HOME/systemd/user or $HOME/.local/share/systemd/user
    $XDG_DATA_DIRS/systemd/user or /usr/local/share/systemd/user
    $dir/systemd/user for each $dir in $XDG_DATA_DIRS
    /usr/local/lib/systemd/user/*
    /usr/lib/systemd/user/*
    $XDG_RUNTIME_DIR/systemd/generator.late/*
    

    要设置 systemd--user总线的环境,我们需要查看man systemd-user.conf. 这些文件中的此设置值会影响user总线:

    ~/.config/systemd/user.conf     <-- Here if it should affect one user
    /etc/systemd/user.conf
    /etc/systemd/user.conf.d/*.conf <-- Here if it should affect all user buses
    /run/systemd/user.conf.d/*.conf
    /usr/lib/systemd/user.conf.d/*.conf
    

    在这种情况下,我不确定我们是否应该设置DefaultEnviornment=or ManagerEnviornment=,所以我会同时设置。

    [Manager]
    ManagerEnviornment="XDG_DATA_DIRS=/my/path:/usr/share/gnome:/usr/local/share/:/usr/share/"
    DefaultEnviornment="XDG_DATA_DIRS=/my/path:/usr/share/gnome:/usr/local/share/:/usr/share/"
    

    然后你需要把你的单位/my/path/systemd/user/

    • 0

相关问题

  • 如何在 Arch Linux 上设置音频,支持多个程序同时发出音频而不创建 asoundrc?

  • 使用 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