web-dev-qa-db-ja.com

systemdターゲットを作成する方法は?

たくさんの投稿、Youtubeビデオ、そしてsystemdに関する「ドキュメント」をたっぷりと検索した後も、私はまだ困っています。

リンク( https://wiki.archlinux.org/index.php/systemd#Create_custom_target )は見込みがあるように見えましたが、(私にとっては)あいまいでした。

質問

特定の.serviceユニットで起動できるように、カスタムsystemdターゲット(IE:foo.target)を作成するにはどうすればよいですか?

  1. システムはdefault.targetを起動します( "foo.target"のシンボリックリンク)
  2. "foo.target"は、最低限のXサーバーとGUIプログラムだけを起動します( "gvim"など)。

理由

私は単に、1つのXプログラムをすばやく起動するためのカスタムターゲットを作成することを考えています。不要なすべてのサービスを除外すると便利です。

前もって感謝します!

18

_man 5 systemd.unit_および_man 5 systemd.target_を読むと、ユニットファイルを使用して、ターゲットやその他のすべてのsystemdを定義していることがわかります。 targetの作成方法に関するドキュメントは特にないため、どのように実行するかを決定することは困難ですが、サービスの作成とそれほど変わりません。

ターゲットを作成するときに、systemdサービスディレクトリから_target.wants_ディレクトリにsymlinksを作成する必要があります。次に、ターゲットを設定/起動できます。これがあなたの例を与えられたときの見た目です。

/etc/systemd/system/foo.target

これは、ターゲットのユニットファイルです。例としてgraphical.targetを取り上げると、それをベースとして使用して独自のターゲットを作成できます。

_[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
_

Systemdマンページから取得したオプションについて説明します。

  • Description-ターゲットについて説明します。あなたは理解する必要があります
  • Requires-ターゲットのハード依存。独自のサービスを開始する前に、基本システムを開始する必要があります
  • Wants-ソフトな依存関係。ターゲットはrequireこれらを開始しません。
  • Conflicts-ユニットに別のユニットで競合設定がある場合、前者を開始すると後者が停止し、逆も同様です。
  • After-これらのサービスの後に起動します
  • AllowIsolate-本当にあなたとあなたの環境次第です。詳細はマンページにありますsystemd.unit(5)

/etc/systemd/system/foo.target.wants/

これは、ターゲットに対して作成/要求するサービスをリンクするディレクトリです。これは、ユニットファイルの_Wants=_オプションと同等です。このディレクトリを作成してから、シンボリックリンクを作成します。 _ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service_。これにより、システムディレクトリのbar.serviceからfoo.target.wantsディレクトリへのシンボリックリンクが作成されます。


サービスのユニットファイルを作成することは、この回答の範囲外であると思います。その質問は間違いなく文書化されているので、ここでは省略します。ユニットファイルを作成したら、それをtarget.wantsディレクトリにシンボリックリンクするか、_Wants=_ディレクティブに追加します。

17
m32