I read (ユーザーモードではなく)ユニットファイル用のフォルダーが2つあること。
/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator
この理解と矛盾するのは、次の回答です: https://unix.stackexchange.com/a/47715/33386 。誰かが不足している情報を記入して、何が起こっているのかを理解できますか? (UPDATE:回答が更新され、私の理解がそれと矛盾することはなくなりました。)
また、スクリプトは/etc/systemd/system/
フォルダー内のサブフォルダーに整理されているようです。
getty.target.wants
multi-user.target.wants
別の場所で私は他の場所があると読んだ。これらはユーザー固有のサービス用のようです。
/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.
2015-08-31の更新:
他の人のために、私が最近尋ねた関連質問へのリンクがあります: systemdユニットによって実行されるスクリプトはどこに置くのですか?
最適な配置場所systemユニットファイル:/etc/systemd/system
必ず追加してください[インストール]セクションのターゲットで、「どうやって知るのですか?」を読んでください。詳細については。 [〜#〜]更新[〜#〜]:/usr/local/lib/systemd/system
は別のオプションです。詳細は「グレー領域」を参照してください。 "
配置するのに最適な場所userユニットファイル:/etc/systemd/user
または$HOME/.config/systemd/user
しかしそれは許可と状況に依存します。
真実は、systemdユニット(または導入文で「ユニット構成」と呼ばれているように)はどこにでも移動できるどこでも—手動でシンボリックリンクを作成する場合そしてあなたは警告を知っています。ユニットをsystemctl daemon-reload
が見つけられる場所に配置することは、いくつかの理由により簡単になります。
systemctl enable
を使用して起動時に簡単に有効化できます。これは、ユニットがユニット依存関係ツリー(ユニットキャッシュ)に自動的に追加されるためです。また、シンボリックリンクを作成する場所をsystemctl enable
はどのように正確に知っていますかユニット自体の[install]
セクションの下にハードコードします。通常、次のような行があります
[Install]
WantedBy = multi-user.target
これは、ファイルシステムの事前定義された場所に対応しています。このようにして、systemctl
は、このユニットがmulti-user.target
というユニットファイルのグループに依存していることを認識します(「ターゲット」は、ユニット依存関係グループを指定するために使用される用語です。すべてのグループをsystemctl list-units --type target
)。ターゲットとともにロードされるユニットファイルのグループは、targetname.target.wants
ディレクトリに配置されます。これは、シンボリックリンク(または本物)でいっぱいのディレクトリです。 [Install]
セクションにWantedBy
がmulti-user.target
であると記載されていても、そのシンボリックリンクがmulti-user.target.wants
ディレクトリに存在しない場合、ロードされません。 systemdユニットジェネレーターが起動時に依存関係ツリーキャッシュにユニットファイルを追加すると(systemctl daemon-reload
でジェネレーターを手動でトリガーできます)、シンボリックリンクを配置する場所を自動的に認識します。この場合は/etc/systemd/system/multi-user.target.wants/
有効にする必要があります。
追加のユニットは、ユニットロードパス上にないディレクトリからsystemd(「リンク」)にロードされる場合があります。 systemctl(1)のlinkコマンドを参照してください。
Systemctlの下で、Unit File Commandsを探します
ユニットファイルは、コンパイル中に決定された一連のパスから読み込まれます。以前にリストされたディレクトリで見つかったユニットファイルは、リストの下のディレクトリにある同じ名前のファイルをオーバーライドします。
変数
$SYSTEMD_UNIT_PATH
が設定されている場合、この変数の内容はユニットロードパスを上書きします。$SYSTEMD_UNIT_PATH
が空のコンポーネント( ":")で終わる場合、通常のユニットロードパスが変数の内容に追加されます。
man systemd.unit
の表1と表2は適切です。
--system
)での実行時にパスをロードします。/etc/systemd/system
ローカル構成/run/systemd/system
ランタイムユニット/usr/lib/systemd/system
インストール済みパッケージの単位--user
)ユーザーあたりの単位とall/globalユーザーの単位には違いがあります。
$XDG_CONFIG_HOME/systemd/user
ユーザー構成($XDG_CONFIG_HOME
が設定されている場合のみ使用)$HOME/.config/systemd/user
ユーザー構成($XDG_CONFIG_HOME
が設定されていない場合のみ使用)$XDG_RUNTIME_DIR/systemd/user
ランタイム単位($XDG_RUNTIME_DIR
が設定されている場合のみ使用)
$XDG_DATA_HOME/systemd/user
ホームディレクトリにインストールされているパッケージの単位($XDG_DATA_HOME
が設定されている場合にのみ使用されます)
$HOME/.local/share/systemd/user
ホームディレクトリにインストールされているパッケージの単位($XDG_DATA_HOME
が設定されていない場合にのみ使用されます)--global
(すべてのユーザー)すべてのユーザーに適用されるユニット。つまり、各ユーザーが所有する単位。したがって、管理者が起動時にサービスを有効にしても、各ユーザーはこれらのサービスを停止できます。
/etc/systemd/user
すべてのユーザーのローカル構成(systemctl --global enable userunit.service
)/usr/lib/systemd/user
すべてのユーザーに対してシステム全体にインストールされているパッケージの単位/run/systemd/user
ランタイムユニット一方、 File Hierarchy Standard は、/etc
がバイナリを実行しないローカル構成用であることを指定します。一方、/usr/local/
は、ローカルでソフトウェアをインストールするときにシステム管理者が使用するためのものです。すべてのシステムユニットファイルを/usr/local/lib/systemd/system
の下に置く必要があると主張することもできますが、これはパッケージマネージャーではなく「ソフトウェア」の一部であるユニットファイルを対象としています。システム全体に対応するsystemdユーザーユニットは、/usr/local/lib/systemd/user
の下に置かれる可能性があります。
_/etc/systemd/system
_はyourスクリプトを配置する場所で、pacmanはpackageスクリプトを_/usr/lib/systemd/system
_に配置します。
_systemctl enable foo.service
_を発行すると、_/usr
_から_/etc
_へのシンボリックリンクが作成されます。詳細については、man systemd.unit(5)
のUnit Load Pathセクションを参照してください。
3つはntpd
用、もう1つは静的イーサネットカード用、そしてもう1つはパッシブOS識別子であるp0f
を実行するために作成しました。それらをすべて/etc/systemd/system
に入れます。おそらくsystemd
にNTPのものを処理させることができるように見えますが、それほどそれには依存したくないと思います。