在我的 Archlinux 系统上,该 /usr/lib/systemd/system/mdmonitor.service
文件包含以下几行:
[Service]
Environment= MDADM_MONITOR_ARGS=--scan
EnvironmentFile=-/run/sysconfig/mdadm
ExecStartPre=-/usr/lib/systemd/scripts/mdadm_env.sh
ExecStart=/sbin/mdadm --monitor $MDADM_MONITOR_ARGS
我怀疑(通过一些谷歌搜索证实)这=-
意味着如果指定的文件不存在,服务不应失败。但是我未能在 systemd 单元文件的联机帮助页中找到该行为。作业的官方文档在哪里=-
?
答案1
这记录在systemd.exec
:
EnvironmentFile=
[...]
传递的参数应该是绝对文件名或通配符表达式,可以选择以“
-
”为前缀,这表示如果文件不存在,则不会读取该文件,并且不会记录错误或警告消息。
并且在systemd.service
:
…… 对于每个指定的命令,第一个参数必须是可执行文件的绝对路径。或者,该文件名可以添加一些特殊字符作为前缀:
ExecStart=
表 1. 特殊可执行前缀
……
ExecStartPre=
,ExecStartPost=
…… 如果这些命令(不带前缀-
)中的任何一个失败,则其余命令不会执行,并且该单元被视为失败。
(要查找 systemd 指令的最完整文档,请在systemd.directives
.)
答案2
另外,像这样的行
之后=-.mount
看起来像另一个“等于减”语法,但它只是一个After=
列出特殊系统单元-.mount
(即根挂载点)的指令。文件:https://www.freedesktop.org/software/systemd/man/systemd.special.html#-.mount