すべてのサービスに対してグローバル環境変数を設定するには?

すべてのサービスに対してグローバル環境変数を設定するには?

DefaultEnvironment=inを使用すると可能であることがわかりました/etc/systemd/system.conf。しかし、式拡張が利用可能かどうかはわかりませんPATH=$PATH:/whatever/path

それでは、グローバル基本サービス環境はどのように設定する必要がありますか?そして表現拡張?

ベストアンサー1

PATHデバイスからシェルコマンドを呼び出すと、設定や他の場所に対する他の回答が機能する可能性があります。/etc/environmentしかし、以下を実行しようとすると:

ExecStart=mycommand

mycommandそしてからエクスポートしようとすると動作$PATHしません。これらの問題を解決するsystemdためには使用されません。$PATHコンパイル時に定義されたパスのリストを使用します。

~からシステムサービス:

コマンドがフル(絶対)パスではない場合は、コンパイル時に決定された固定検索パスを使用してフルパスとして解決されます。検索されたディレクトリには、パーティション/usr/bin/および/bin/ディレクトリを使用するシステムの/usr/local/bin/、/usr/bin/、/bin/、パーティションbin/および/bin/ディレクトリを使用するシステムの/usr/local/bin/ が含まれます。 sbin/ sbin/ 対応するディレクトリ。したがって、実行可能ファイルが「標準」ディレクトリにある場合にのみ実行可能ファイル名を使用することは安全であり、他の場合は絶対パスを使用する必要があります。あいまいさを避けるために絶対パスを使用することをお勧めします。ヒント:この検索パスを照会できますsystemd-path search-binaries-default

ベストプラクティスは、Exec*=フィールドを使用するときに絶対パスを使用することです。これにより必要性がなくなり、$PATH他の人に他の場所にバイナリを追加してもサービスの動作は変わりません/usr/local/bin。通常、テンプレート以外のサービスは動的に設計されていません(ローカル環境に応じてコンテンツや意図を変更するように設計されています)。

おすすめ記事