- systemd.index 中文手册
- systemd.directives 中文手册
- binfmt.d 中文手册
- bootctl 中文手册
- bootup 中文手册
- busctl 中文手册
- coredump.conf 中文手册
- coredumpctl 中文手册
- crypttab 中文手册
- daemon 中文手册
- dnssec-trust-anchors.d 中文手册
- environment.d 中文手册
- file-hierarchy 中文手册
- halt 中文手册
- hostname 中文手册
- hostnamectl 中文手册
- hwdb 中文手册
- journal-remote.conf 中文手册
- journal-upload.conf 中文手册
- journalctl 中文手册
- journald.conf 中文手册
- kernel-command-line 中文手册
- kernel-install 中文手册
- loader.conf 中文手册
- locale.conf 中文手册
- localectl 中文手册
- localtime 中文手册
- loginctl 中文手册
- logind.conf 中文手册
- machine-id 中文手册
- machine-info 中文手册
- machinectl 中文手册
- modules-load.d 中文手册
- networkctl 中文手册
- networkd.conf 中文手册
- nss-myhostname 中文手册
- nss-mymachines 中文手册
- nss-resolve 中文手册
- nss-systemd 中文手册
- os-release 中文手册
- pam_systemd 中文手册
- portablectl 中文手册
- resolvectl 中文手册
- resolved.conf 中文手册
- shutdown 中文手册
- sysctl.d 中文手册
- systemctl 中文手册
- systemd 中文手册
- systemd-analyze 中文手册
- systemd-ask-password 中文手册
- systemd-ask-password-console.service 中文手册
- systemd-backlight@.service 中文手册
- systemd-binfmt.service 中文手册
- systemd-bless-boot-generator 中文手册
- systemd-bless-boot.service 中文手册
- systemd-boot 中文手册
- systemd-boot-check-no-failures.service 中文手册
- systemd-cat 中文手册
- systemd-cgls 中文手册
- systemd-cgtop 中文手册
- systemd-coredump 中文手册
- systemd-cryptsetup-generator 中文手册
- systemd-cryptsetup@.service 中文手册
- systemd-debug-generator 中文手册
- systemd-delta 中文手册
- systemd-detect-virt 中文手册
- systemd-environment-d-generator 中文手册
- systemd-escape 中文手册
- systemd-firstboot 中文手册
- systemd-fsck@.service 中文手册
- systemd-fstab-generator 中文手册
- systemd-getty-generator 中文手册
- systemd-gpt-auto-generator 中文手册
- systemd-halt.service 中文手册
- systemd-hibernate-resume-generator 中文手册
- systemd-hibernate-resume@.service 中文手册
- systemd-hostnamed.service 中文手册
- systemd-hwdb 中文手册
- systemd-id128 中文手册
- systemd-importd.service 中文手册
- systemd-inhibit 中文手册
- systemd-initctl.service 中文手册
- systemd-journal-gatewayd.service 中文手册
- systemd-journal-remote.service 中文手册
- systemd-journal-upload.service 中文手册
- systemd-journald.service 中文手册
- systemd-localed.service 中文手册
- systemd-logind.service 中文手册
- systemd-machine-id-commit.service 中文手册
- systemd-machine-id-setup 中文手册
- systemd-machined.service 中文手册
- systemd-makefs@.service 中文手册
- systemd-modules-load.service 中文手册
- systemd-mount 中文手册
- systemd-networkd-wait-online.service 中文手册
- systemd-networkd.service 中文手册
- systemd-notify 中文手册
- systemd-nspawn 中文手册
- systemd-path 中文手册
- systemd-portabled.service 中文手册
- systemd-quotacheck.service 中文手册
- systemd-random-seed.service 中文手册
- systemd-rc-local-generator 中文手册
- systemd-remount-fs.service 中文手册
- systemd-resolved.service 中文手册
- systemd-rfkill.service 中文手册
- systemd-run 中文手册
- systemd-run-generator 中文手册
- systemd-sleep.conf 中文手册
- systemd-socket-activate 中文手册
- systemd-socket-proxyd 中文手册
- systemd-suspend.service 中文手册
- systemd-sysctl.service 中文手册
- systemd-system-update-generator 中文手册
- systemd-system.conf 中文手册
- systemd-sysusers 中文手册
- systemd-sysv-generator 中文手册
- systemd-time-wait-sync.service 中文手册
- systemd-timedated.service 中文手册
- systemd-timesyncd.service 中文手册
- systemd-tmpfiles 中文手册
- systemd-tty-ask-password-agent 中文手册
- systemd-udevd.service 中文手册
- systemd-update-done.service 中文手册
- systemd-update-utmp.service 中文手册
- systemd-user-sessions.service 中文手册
- systemd-vconsole-setup.service 中文手册
- systemd-veritysetup-generator 中文手册
- systemd-veritysetup@.service 中文手册
- systemd-volatile-root.service 中文手册
- systemd.automount 中文手册
- systemd.device 中文手册
- systemd.dnssd 中文手册
- systemd.environment-generator 中文手册
- systemd.exec 中文手册
- systemd.generator 中文手册
- systemd.journal-fields 中文手册
- systemd.kill 中文手册
- systemd.link 中文手册
- systemd.mount 中文手册
- systemd.netdev 中文手册
- systemd.network 中文手册
- systemd.nspawn 中文手册
- systemd.offline-updates 中文手册
- systemd.path 中文手册
- systemd.preset 中文手册
- systemd.resource-control 中文手册
- systemd.scope 中文手册
- systemd.service 中文手册
- systemd.slice 中文手册
- systemd.socket 中文手册
- systemd.special 中文手册
- systemd.swap 中文手册
- systemd.syntax 中文手册
- systemd.target 中文手册
- systemd.time 中文手册
- systemd.timer 中文手册
- systemd.unit 中文手册
- sysusers.d 中文手册
- timedatectl 中文手册
- timesyncd.conf 中文手册
- tmpfiles.d 中文手册
- udev 中文手册
- udev.conf 中文手册
- udevadm 中文手册
- user@.service 中文手册
- vconsole.conf 中文手册
systemd.environment-generator 中文手册
名称
systemd.environment-generator — systemd 环境变量生成器
大纲
/usr/lib/systemd/system-environment-generators/some-generator
/usr/lib/systemd/user-environment-generators/some-generator
系统生成器目录/run/systemd/system-environment-generators/*
/etc/systemd/system-environment-generators/*
/usr/local/lib/systemd/system-environment-generators/*
/usr/lib/systemd/system-environment-generators/*
用户生成器目录/run/systemd/user-environment-generators/*
/etc/systemd/user-environment-generators/*
/usr/local/lib/systemd/user-environment-generators/*
/usr/lib/systemd/user-environment-generators/*
描述
本文所说的"生成器",本质上是位于上一小节所列目录中的一些可执行程序。systemd(1)将会在其自身刚启动的早期、以及重新加载其自身的配置信息时,执行这些环境变量生成器。注意,环境变量生成器的运行始终早于systemd.generator(7)中所描述的其他生成器,并且也早于任何单元的启动。环境变量生成器能够覆盖服务管理器(systemd)传递给服务单元以及其他进程的环境变量。
生成器的加载目录取决于编译时的配置,一般情况下(--prefix=/usr),就是上一小节所列的目录。系统环境变量生成器与用户环境变量生成器分别从system-environment-generators/
与user-environment-generators/
目录中加载。位于列表中较前目录中的生成器,将会覆盖列表中较后目录中的同名生成器,也就是列表中较前的目录的优先级也更高。因此,可以使用高优先级目录中的一个指向 /dev/null
的同名软连接(或空文件),去屏蔽低优先级目录中的一个同名生成器(也就是禁止它运行)。注意,生成器目录的优先级顺序与单元目录的优先级顺序并不相同,具体就是 /run
目录的优先级比 /etc
目录更高。
在安装或更新了生成器之后,必须执行 systemctldaemon-reload 命令才能最终实际生效。该命令将会重新运行所有生成器来更新环境变量。在此命令之后启动的所有服务就都使用新的环境变量了。
环境变量生成器的执行与systemd.generator(7)中描述的单元生成器的执行类似,不同之处在于:
环境变量生成器按照其文件名的字典顺序依次串行执行。生成器的输出将会被立即解析,并被立即用于更新环境变量。因此,后继生成器可以看到先前生成器的成果,并基于它做进一步的修改。
每一个 systemd 实例都会在启动时运行一次环境变量生成器,生成器每一次运行的输出内容可以各不相同。
为了简化对生成器的排序,建议给每个生成器的文件名前面加上两位数字的前缀。
例子
例 1. 一个简单的环境变量生成器,当指定的目录存在时,就扩展特定的环境变量。
# 50-xdg-data-dirs.sh #!/bin/bash # 设置默认值 XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}" # 若指定的目录存在,则添加进来 if [[ -d /opt/foo/share ]]; then XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS} fi # 显示最终结果 echo XDG_DATA_DIRS=$XDG_DATA_DIRS
例 2. 一个略微复杂的环境变量生成器,读取现存的配置信息,并规范化特定的环境变量。
# 90-rearrange-path.py #!/usr/bin/env python3 """ 下面是一段 systemd 环境变量生成器的演示代码,用于确保 在可执行文件的目录搜索顺序中, bin 目录之后永远紧跟对应的 sbin 目录。 (例如将 /sbin:/bin:/foo/bar 修改为 /bin:/sbin:/foo/bar ) 该示例生成器演示了如何改写先前已经创建的环境变量。 虽然用 bash 很容易实现,但是本例中我们使用 Python 以表明可以有多种实现方式,同时也便于读者基于此示例, 实现其他更有意思的想法。 """ import os import pathlib def rearrange_bin_sbin(path):"""确保每一对 …/bin, …/sbin 目录都遵守合理的顺序 >>> rearrange_bin_sbin('/bin:/sbin:/usr/sbin:/usr/bin')'/bin:/sbin:/usr/bin:/usr/sbin'"""items = [pathlib.Path(p) for p in path.split(':')]for i in range(len(items)): if 'sbin' in items[i].parts: ind = items[i].parts.index('sbin') bin = pathlib.Path(*items[i].parts[:ind], 'bin', *items[i].parts[ind+1:]) if bin in items[i+1:]: j = i + 1 + items[i+1:].index(bin) items[i], items[j] = items[j], items[i]return ':'.join(p.as_posix() for p in items) if __name__ == '__main__':path = os.environ['PATH'] # 必须设置此行, # 否则将会崩溃new = rearrange_bin_sbin(path)if new != path: print('PATH={}'.format(new))
例 3. 调试环境变量生成器
SYSTEMD_LOG_LEVEL=debug VAR_A=something VAR_B="something else" \ /usr/lib/systemd/system-environment-generators/path-to-generator
参见
systemd-environment-d-generator(8),systemd.generator(7),systemd(1),systemctl(1)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论