システムユニットファイルを配置するのに最適な場所: /etc/systemd/system
[インストール]セクションの下にターゲットを追加するようにしてください。詳細については。 UPDATE:/usr/local/lib/systemd/systemもう1つのオプションです。詳細については、「グレー領域」を参照してください。
ユーザーユニットファイルを置くのに最適な場所: /etc/systemd/userまたは$HOME/.config/systemd/user
、許可と状況に依存します。
真実は、システム化されたユニット(またはイントロ文でそれらを「ユニット構成」と呼ぶ)はどこにでも行くことができるということです。systemctl daemon-reloadいくつかの正当な理由により、ユニットを見つけやすい場所に置くことが簡単になります。
- 標準の場所を使用するということは、systemdジェネレーターがそれらを見つけて、起動時に簡単に有効にできることを意味します
systemctl enable。これは、ユニットがユニット依存関係ツリー(ユニットキャッシュ)に自動的に追加されるためです。
- 適切な特権ユーザーのみが指定された領域に書き込むことができるため、権限について考える必要はありません。
どうやってわかるの?
そしてsystemctl enable、シンボリックリンクを作成する場所を正確にどのように知っていますか?[install]セクションの下のユニット自体にハードコーディングします。通常、次のような行があります
[Install]
WantedBy = multi-user.target
ファイルシステム上の事前定義された場所に対応します。この方法で、systemctlこのユニットはユニットファイルのグループに依存していることがわかりますmulti-user.target(「ターゲット」はユニット依存グループを指定するために使用される用語です。すべてのグループをでリストできますsystemctl list-units --type target)。ターゲットとともにロードされるユニットファイルのグループは、targetname.target.wantsディレクトリに配置されます。これは、シンボリックリンク(または本物)でいっぱいのディレクトリです。あなたの場合は[Install]セクションが言うことはあるが、それへのシンボリックリンクが存在しない場合は、ディレクトリ、それはロードされません。systemdユニットジェネレーターは、起動時にユニットファイルを依存関係ツリーキャッシュに追加すると(手動でジェネレーターをトリガーできます)、シンボリックリンクを配置する場所(この場合はディレクトリ)を自動的に認識しますWantedBymulti-user.targetmulti-user.target.wantssystemctl daemon-reload/etc/systemd/system/multi-user.target.wants/ 有効にする必要があります。
マニュアルのキーポイント:
追加のユニットは、ユニットのロードパス上にないディレクトリからsystemdにロード(「リンク」)される場合があります。systemctl(1)のlinkコマンドを参照してください。
systemctlで、Unit Fileコマンドを探します
ユニットファイルのロードパス
ユニットファイルは、コンパイル中に決定された一連のパスからロードされます。これについては、以下の2つの表で説明します。前述のディレクトリで見つかったユニットファイルは、リストの下のディレクトリにある同じ名前のファイルを上書きします。
変数$SYSTEMD_UNIT_PATHが設定されると、この変数の内容がユニットロードパスをオーバーライドします。$SYSTEMD_UNIT_PATH空のコンポーネント( ":")で終わる場合、通常のユニットロードパスが変数の内容に追加されます。
表1と表2 man systemd.unitは良好です。
システムモードで実行するときにパスをロードします(--system)。
/etc/systemd/system ローカル設定
/run/systemd/system ランタイムユニット
/usr/lib/systemd/system インストール済みパッケージの単位
ユーザーモードで実行中のロードパス(--user)
ユーザー単位とすべて/グローバルユーザー単位には違いがあります。
ユーザー依存
--global (すべてのユーザー)
すべてのユーザーに適用されるユニット-各ユーザーが所有することも意味します。そのため、管理者が起動時にサービスを有効にしている場合でも、各ユーザーはこれらのサービスを停止できます。
/etc/systemd/user すべてのユーザーのローカル構成(systemctl --global enable userunit.service)
/usr/lib/systemd/user すべてのユーザーに対してシステム全体にインストールされているパッケージの単位
/run/systemd/user ランタイムユニット
グレーエリア
一方では、ファイル階層標準/etcは、バイナリを実行しないローカル構成用であることを指定しています。一方、/usr/local/「ソフトウェアをローカルにインストールするときにシステム管理者が使用する」ことを指定します。また、(組織の目的だけでなくとも)すべてのシステムユニットファイルを管理する必要があると主張することもできます/usr/local/lib/systemd/systemが、これはパッケージマネージャーからではなく「ソフトウェア」の一部であるユニットファイルを対象としています。システム全体に対応するsystemdユーザーユニットは、になり
/usr/local/lib/systemd/userます。
/etc/systemd/systemは、スクリプトを配置する場所であり、pacmanはパッケージスクリプトを配置し/usr/lib/systemd/system、発行systemctl enable foo.serviceするシンボリックリンクを作成/usrし/etcます...