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