Sytemd:SYSTEMD_UNIT_PATH変数を設定する方法

Sytemd:SYSTEMD_UNIT_PATH変数を設定する方法

私はyoctoに基づいて組み込みLinuxを開発しています。システムは読み取り専用でインストールされ、systemdを使用してデータパーティションのopkgによってインストールされたアプリケーションを管理したいと思います。

これを行うには、ターゲットを作成し、default.targetリンクを自分のターゲットを指すように変更しました。これは機能し、/etc/systemd/system/フォルダにインストールされているサービスを実行できます。

次の手順は、/data/etc/systemd/system/などのフォルダにインストールされているサービスを実行することです。

systemdドキュメントでSYSTEMD_UNIT_PATH変数を設定して、systemdがサービスを探しているフォルダを展開できることを発見しました。しかし、多くのテスト後もこの変数を正しく設定する方法が見つからず、systemdは私のサービスを見つけることができませんでした。

この問題を解決するのに役立ちますか?

編集:カーネルコマンドラインに追加せずにこれを行う方法があれば完璧です。

ありがとうございます。

答え1

AFAIKは、変数が最初に表示されたときにのみSYSTEMD_UNIT_PATH変数に従います。systemdスタートsystemctl set-environmentその後、後でコマンドで変更しても、もはやそうではありません。

また、この変数は実際にサービスファイルを見つけるための追加のパスを提供しませんが、標準パスを完全にオーバーライドします。つまり、systemd環境にこの変数が設定されているインスタンスを起動すると、インスタンスは通常のパスと優先順位の低い他のすべてのパスを無視し、そのパスのsystemdサービスファイルのみを検索します。/etc/systemd

技術的には、あなたの状況に合ったいくつかのまたは3つの複雑な(そして複雑な)ソリューションがあるかもしれませんが、これまでで最も優れたシンプルなソリューションは、ディストリビューションベンダーが行ったように実行することです。サービスファイルを添付します。/lib/systemd/パス内または下に置きます。デフォルトでは、パスはその/etc/systemdパスを反映し、ベンダーが自分のパスを配置できるように正確に設計されています。systemdユニットファイル。結局、Yoctoプロジェクトの場合はいディストリビューションプロバイダ。

答え2

マンシステムで

$SYSTEMD_UNIT_PATH、$SYSTEMD_GENERATOR_PATH、$SYSTEMD_ENVIRONMENT_GENERATOR_PATH systemd がユニットファイルとジェネレータを探す場所を制御します。これらの変数には、コロン( ":")で区切られたパスのリストを含めることができます。設定時にリストが空のコンポーネント("...:")で終わると、リストは通常​​のパスセットの前に追加されます。それ以外の場合、指定されたリストは一般的なパスセットを置き換えます。

したがって、systemdが起動する前にエクスポートする場合は、次のようになります。

export SYSTEMD_UNIT_PATH="/mypath:"

/ mypathが前に追加され、ここにシステムファイルを保存できます。

関連情報