/usr/lib/systemd/system/sshd.service
Fedora 25システムのファイルで次の行を見ています。
ExecStart=/usr/sbin/sshd -D $OPTIONS
私はそれがどこから来るのかわかりません$OPTIONS
。環境変数のように見えますが、このようにシェル変数を設定すると無視されます。
# OPTIONS='-p 9999'
# systemctl start sshd
systemd.serviceのマニュアルページのコマンドラインセクションを読みました。これは、環境変数を1行に設定できることを示しています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ファイルでその変数を設定して、その変数が有効であることを確認できます。
シェルコマンドラインで環境変数を設定すると、AFAIU systemdはシェルが呼び出す環境でサービスを実行しませんが、デフォルトのsystemctl
systemdプロセスからサービスを分岐します。これにより、誤ってシェル環境の設定が継承されなくなります。環境変数は広範な影響を及ぼす可能性があり、サービスがシステム起動時に開始されるのか、コマンドラインから再起動されるかに応じて、サービスが異なる動作をする場合は迷惑になることがあります。
しかし$MAINPID
、これは特別です。。