システム環境:変数があるかどうかを確認する

システム環境:変数があるかどうかを確認する

Environmentsystemdはサービスファイルでこれを許可しますか?

Environment=abc=${abc:-'notABC?'}

つまり、存在するabcように設定し、そうでない場合にはabcabcabcnotABC?

systemdはこれを行うことができますか?

答え1

いいえ、これは最小限の変数拡張のみをサポートし、実際にはシェルなどの変数置換を達成するように設計されていないシステム単位ファイルでは不可能です。

説明するものと同様のものが必要な場合は、初期化をシェルスクリプトにラップし、実行可能ファイルでそのスクリプトを使用することをお勧めします。ExecStart=この場合、サービスを実行する前に環境変数を設定できるシェルのすべての機能があります。メインプログラム。

内部でシェルスクリプトを使用している場合は、シェルがsystemdでコマンドを直接監視するのを防ぐために、スクリプトの最後でデフォルトプログラムを起動する必要がありますExecStart=exec

追加の外部ファイルを作成して保持したくない場合は、ユニットファイルにシェルスクリプトをインライン化できますが、この場合は明示的にシェルを呼び出す必要があります(sh -c他のシェルまたはそれに対応するシェルを使用して)、エスケープする必要があることに注意してください$。そのうちの2つを使用します)systemdが解釈を試みることを防ぎます。したがって、次のようなものが必要です。

ExecStart=/bin/sh -c 'abc=$${abc:-"notABC?"}; exec mycmd "$abc"'

関連情報