/usr/lib/systemd/system/sshd.service
我正在Fedora 25 机器上查看文件中的以下行:
ExecStart=/usr/sbin/sshd -D $OPTIONS
我不确定从哪里来$OPTIONS
。它看起来像一个环境变量,尽管当我以这种方式设置 shell 变量时它会被忽略,例如
# OPTIONS='-p 9999'
# systemctl start sshd
我通读了 systemd.service 手册页的命令行部分,这表明可以通过一行设置环境变量Environment
:
Environment="ONE=one" 'TWO=two two'
但是,那里没有设置这样的 OPTIONS 变量。
另外还有一行EnvironmentFile
,例如:
EnvironmentFile=-/etc/sysconfig/sshd
那里也没有$OPTIONS
设置变量。指的是什么$OPTIONS
?它是如何设定的?
答案1
Debian 中的单元文件类似,包含:
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
在这里,EnvironmentFile 分配SSHD_OPTS
:
# Options to pass to sshd
SSHD_OPTS=
Fedora 很可能使用类似的系统,但由于某种原因,他们只是没有显式设置该变量。这不重要,它应该扩展为空字符串。
有提到这里例如,httpd.service
使用OPTIONS
类似的方法,并将其设置为/etc/sysconfig/httpd
.因此,它可能只是由于某种原因而未设置。
您可以检查sshd
的命令行以ps
查看变量扩展为什么,也可以将其设置为 sysconfig 文件中的某些内容以检查它在此处设置是否有效。
至于在 shell 命令行上设置环境变量,AFAIU systemd 不会在 shell 调用的环境中运行服务systemctl
,而是将它们从主 systemd 进程中分叉出来。这样他们就不会意外地继承 shell 环境的设置。环境变量可能会产生广泛的影响,如果您的服务根据是在系统引导时启动还是从命令行重新启动而采取不同的行为,这会很烦人。
然而$MAINPID
,这很特别。