本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-run-generator — 将内核引导参数中的命令封装为系统服务
/usr/lib/systemd/system-generators/systemd-run-generator
systemd-run-generator
生成器能够理解
如下三个内核引导参数:
由 systemd.run=
设置的命令,将会被封装为
kernel-command-line.service
服务,并被用作系统的启动目标。服务类型将被设为
Type=oneshot
,并且默认配置为 SuccessAction=exit
与
FailureAction=exit
,以确保在命令执行结束之后立即关闭系统。
如果可能,命令的退出状态将被传递给调用此命令的容器管理器(例如
systemd-nspawn(7)),
并有可能会被进一步传递给调用容器管理器的 shell 。
多次使用该内核引导参数表示依次将每个命令按顺序放入多个 ExecStart=
中(一条命令对应一个)。
命令将作为常规服务执行,也就是
DefaultDependencies=On
。
systemd.run_success_action=
与 systemd.run_failure_action=
用于设置在命令执行完成之后的动作。设为 "none
" 表示不做任何动作,保持系统继续运行。
对于其他可用值,可以参见
systemd.unit(5) 手册。
systemd-run-generator
遵守
systemd.generator(7) 规范。
向容器内添加一个用户(使用 systemd-nspawn(7) 工具):
# systemd-nspawn -D mycontainer -b systemd.run='"adduser test"'
注意,上述命令中的两层引号都是必须的! 外层的单引号将会首先被 shell 在向 systemd-nspawn 传递参数时剥离, 内层的双引号会一直传递到容器的内核命令行上,最后被 systemd-run-generator 剥离,最终确保由两个单词组成的命令 adduser test 完整的传递到最终生成的单元文件中, 而不会在中途被 shell 或单元生成器拆散。