systemd
デーモン¶
systemd
プログラムは、プロセス ID が 1 であるプロセスです。これはシステム
の起動時に、その初期化処理を指定通りの方法で行なうために利用します。
systemd
はカーネルから直接起動して使用するもので、通常はプロセスを kill
するために使用するシグナル 9 を、無視して動作します。その他のプログラム
は systemd
から直接起動されるか、もしくは直接起動されたプロセスの子や孫の
プロセスとして起動されることになります。
System V init と systemd の違いについて | |
---|---|
完全な互換性を確保する目的で、 |
openSUSE 12 以降のバージョンでは、 System V init デーモンは systemd
に置き換えられるようになりました。 systemd
は System V init との完全な
互換性 (init スクリプトに対応しているため) があるほか、 systemd
では
サービスの起動を同時並行で行なう仕組みになっているため、起動にかかる時間が
大きく短縮されています。これに加えて、 systemd
ではサービスを必要なときに
だけ起動します。たとえば印刷用のデーモンである cupsd
はシステムの起動時には開始されませんが、起動後にはじめてユーザが文書を
印刷しようとしたときに起動されます。また、 systemd
ではカーネルの
コントロールグループ (cgroups) にも対応しているほか、システムの状態を
スナップショットに保存したり、その状態に復元したりすることもできます。
詳しくは http://www.freedesktop.org/wiki/Software/systemd/
をお読みください。
System V init の仕組みでは、複数のコマンドを利用してサービスを処理していました
—init スクリプトや insserv, telinit
などのコマンドがそれにあたります。 systemd
では、サービスに対する主な処理を
実行する際、コマンド 1 つで済むようになっています。それが systemctl
で、 git や zypper のように、コマンドの
後ろにサブコマンドを指定して実行します:
systemctl[一般オプション]
サブコマンド
[サブコマンドのオプション]
詳しくは、 man 1 systemctl で表示されるマニュアルページをお読みください。
端末の出力と bash の補完について | |
---|---|
|
サービスを管理するためのサブコマンドは、 System V init でのサービス管理 コマンドと同じ (start, stop, ...) です。一般的な使い方は下記のとおりです:
systemd
systemctl reload|restart|start|status|stop|...
<my_service(s)>
.service
rc<サービス名>
reload|restart|start|status|stop|...
systemd
では、複数のサービスを一括で管理することもできます。 init スクリプト
をそれぞれ実行しなければならなかった System V init とは異なり、下記のように
実行します:
systemctl start<1 つめのサービス>
.service<2 つめのサービス>
.service
下記の表には、 systemd
と System V init におけるサービス管理コマンドを、
それぞれ並べています:
表8.1 サービス管理コマンド
作業 |
|
SysV init でのサブコマンド |
---|---|---|
起動 |
start |
start |
停止 |
stop |
stop |
再起動 サービスを停止し、その後に起動し直します。 その時点でサービスが起動していなかった場合は、起動する 場合と同じ意味になります。 |
restart |
restart |
条件付きの再起動 サービスが現在動作中の場合、サービスを再起動します。 動作していなかった場合は、何も行ないません。 |
try-restart |
try-restart |
再読み込み
サービスの動作を止めることなく、そのサービスに対する設定
ファイルを読み込み直します。これはたとえば、 Apache に対して修正後の
|
reload |
reload |
再読み込みまたは再起動 指定のサービスが再読み込みに対応していればそれを行ない、 対応していなければ再起動を行ないます。その時点でサービスが 動作していなかった場合は、単純に起動を行ないます。 |
reload-or-restart |
n/a |
条件付きの再読み込みまたは再起動 指定のサービスが再読み込みに対応していればそれを行ない、 対応していなければ再起動を行ないます。その時点でサービスが 動作していなかった場合は、何も行ないません。 |
reload-or-try-restart |
n/a |
詳細な状態情報を取得する
サービスの状態について、情報を表示します。 |
status |
status |
簡潔な状態情報を取得する サービスが動作しているかどうかを表示します。 |
is-active |
status |
既定では、 systemd
は過剰に冗長な出力を行ないません。サービスの起動が
成功した場合は何も出力されず、失敗した場合にのみ短いエラーメッセージを
表示します。起動についてデバッグしたり、サービスの操作状態を確認したり
したい場合は、 systemctl status コマンドをお使いください。
systemd
は、独自のログ機構 (「ジャーナル」 と呼びます) で
システムメッセージを記録します。これにより、サービスの状態メッセージと、
そのサービスから出力されたメッセージの両方を表示できるようになっています。
また、 status コマンドは tail
コマンドに似た動作をするようになっているほか、ログメッセージを様々な
形式で表示することもできます。これにより、便利なデバッグツールとして
利用できるようになっています。
サービスの起動に失敗した場合は、 systemctl status
<サービス名>
.service のように
実行することで、詳細なエラーメッセージを表示することができます:
www.example.com: ~ # systemctl start apache2.service Job failed. See system journal and 'systemctl status' for details. www.example.com: ~ # systemctl status apache2.service Loaded: loaded (/lib/systemd/system/apache2.service; disabled) Active: failed (Result: exit-code) since Mon, 04 Jun 2012 16:52:26 +0200; 29s ago Process: 3088 ExecStart=/usr/sbin/start_apache2 -D SYSTEMD -k start (code=exited, status=1/FAILURE) CGroup: name=systemd:/system/apache2.service Jun 04 16:52:26 g144 start_apache2[3088]: httpd2-prefork: Syntax error on line 205 of /etc/apache2/httpd.conf: Syntax error on li...alHost>
n
行分のサービスメッセージの表示
status サブコマンドは、既定ではサービスが出力した
メッセージのうち、直近の 10 行を表示します。表示する行数を変更したい
場合は、 --lines=
パラメータを指定して実行してください:
n
systemctl status ntp.service systemctl --lines=20 status ntp.service
サービスからのメッセージを 「リアルタイムに」 表示したい
場合は、 --follow
オプションを利用します。これは
tail -f
に似た動作をするものです:
systemctl --follow status ntp.service
サービスメッセージの出力形式を変更したい場合は、 --output=
パラメータを指定してください。
主なモードには、下記のようなものがあります:
モード
short
既定の形式です。ログメッセージそのもののほか、人間が読みやすい形式で タイムスタンプが併記されます。
verbose
全ての項目を表示する形式です。
cat
タイムスタンプを併記しない、簡潔な出力形式です。
上述のサービスの管理コマンドでは、現在動作中のシステムに対するサービスの
操作を行ないます。 systemd
では、サービスを恒久的に有効化/無効化し、
必要に応じてシステムの起動時に自動的に開始したり、逆に開始しないように
したりすることもできます。これは YaST やコマンドラインからも実施すること
ができます。
下記の表には、 systemd
と System V init におけるサービスの有効化/無効化
コマンドを示しています:
サービスの起動について | |
---|---|
コマンドラインからサービスを有効化した場合、動作中のシステムでは
サービスが起動されず、次回のシステム起動またはランレベル/ターゲット変更
の際に起動されることに注意してください。有効化した際、即時にサービスを
起動したい場合は、 systemctl start
|
表8.2 サービスの有効化/無効化のコマンド
作業 |
|
SysV init でのサブコマンド |
---|---|---|
有効化 |
systemctl enable |
insserv |
無効化 |
systemctl disable |
insserv |
確認 サービスが有効に設定されているかどうかを表示します。 |
systemctl is-enabled |
n/a |
再有効化 サービスを再起動するのと似た仕組みで、このコマンドは いったん無効化した後に有効化します。これはサービスの有効化状態を、 既定値に戻したい場合に利用します。 |
systemctl reenable |
n/a |
マスク サービスを 「無効化」 しても、コマンドラインから 実行することでサービスは起動できてしまいます。サービスを完全に 無効化するには、このようにマスクを設定する必要があります。 注意してお使いください。 |
systemctl mask |
n/a |
マスク解除 マスクを行なった場合は、マスクを解除することで 再度起動できるようになります。 |
systemctl unmask |
n/a |
YaST のモジュールを 図8.1「システムサービス (ランレベル)」 をご覧ください) が表示されるだけの ものです。左側の列にはサービスの名前が、中央の列にはサービスの状態が、右側の列 には短い説明が表示されます。サービスを選択すると、下側により詳しい説明が表示 されます。サービスを有効化するには、表から対象のサービスを選択して を選択してください。サービスを無効化する場合も 同様です。
+ + で起動すると、まずは で表示されます。これは 利用可能な全てのサービスに対して、概要と状態 (詳しくは8.2.1項 「ターゲットとランレベル」 をお読みください) を詳細に制御する ために使用するモードです。現在の既定のランレベルは、画面上部に表示されます。 通常、 openSUSE システムにおける既定のランレベルは 5 (ネットワークと X Window System を動作させるマルチユーザ環境) です。場合によっては ランレベル 3 (ネットワークを動作させるマルチユーザ環境) が設定されている 場合もあります。
は、ランレベル (詳しくはウインドウ内の表を利用することで、 個別のサービスやデーモンを有効化したり無効化したりすることもできます。 表内には利用可能なサービスやデーモンの一覧が表示され、お使いのシステムで 現在有効化されているかどうかと、どのランレベルに対して有効に設定されて いるかどうかが表示されます。マウスでいずれかの行 (サービスやデーモン) を 選択したあと、ランレベルを表すチェックボックスで設定を行ってください。 また、現在選択されているサービスやデーモンについて、概要説明が表の下に 表示されます。
ランレベル設定の誤りによって発生する障害について | |
---|---|
ランレベルの設定を誤ると、場合によってはお使いのシステムが利用できなく なってしまいます。設定を適用する前に、どのような影響があるのかを ご確認ください。 |
を押すと、サービスを開始したり停止 したりすることができます。 を押すと、現在の 状態を表示することができます。また、 を押すと、行なった変更をシステムに適用したり、ランレベルエディタを起動する 前の設定に戻したりすることができます。 を押すと、 変更点をディスクに書き込みます。
システムの起動やシャットダウンに関する全ての処理は、 systemd
が管理します。
このような観点からすると、カーネルは他の全てのプロセスを管理するバックグラウンド
(裏側の) プロセスであり、他のプログラムが要求する CPU 時間やハードウエア
アクセスを調整する仕組みと考えられます。
System V init の環境では、システムは 「ランレベル」 と呼ばれる
仕組みを利用して起動していました。ランレベルとは、システムやサービスの起動
方法を定義するもので、それぞれ番号を付けて区別していました。よく知られて
いるランレベルとしては、 0
(システムのシャットダウン),
3
(ネットワークまでを動作させるマルチユーザ環境),
5
(ネットワークとディスプレイマネージャを動作させる
マルチユーザ環境) などがあります。
systemd
では、 「ターゲットユニット」 と呼ばれる新しい仕組みを
利用しています (もちろん従来のランレベルの考え方についても、完全な互換性を
備えています) 。ターゲットユニットは、番号ではなく名前で識別する仕組みで、
それぞれ異なる目的を示しています。たとえば local-fs.target
や swap.target
は、それぞれローカルの
ファイルシステムのマウント、スワップ領域のマウントなどを表わします。
graphical.target
というターゲットは、ネットワークと
ディスプレイマネージャを動作させるマルチユーザ環境で、ランレベル 5 と同じ意味を
持っています。このようなターゲットは 「メタ」
ターゲットと呼ばれるもので、他のターゲットをまとめてセットにしたものを
指しています。このように、 systemd
は既存のターゲットを組み合わせる
ことで、簡単に独自のターゲットを作成できるため、非常に柔軟な運用を行なう
ことができます。
下記の表では、 systemd
で利用される最も重要なターゲットを示しています。
全てを網羅した表については、 man 7 systemd.special で表示
されるマニュアルページをお読みください。
systemd
のターゲットユニット
default.target
システムの起動時に既定で選択されるターゲットです。これは 「実在する」
というよりは、他のターゲット (たとえば graphic.target
)
に対するシンボリックリンクという意味合いです。このターゲットは YaST から
恒久的に変更することができる (詳しくは 8.1.3.2項 「YaST を利用したサービスの有効化/無効化」
をお読みください) ようになっています。一時的に変更したい場合は、システムの
起動時、カーネルのコマンドラインオプションに
systemd.unit=
を指定してください。
<my_target>.target
emergency.target
コンソール上で非常用のシェルを起動します。システム起動時に
systemd.unit=emergency.target
のように指定して
利用します。
graphical.target
ネットワークとマルチユーザに対応し、ディスプレイマネージャを起動します。
halt.target
システムをシャットダウンします。
mail-transfer-agent.target
メールの送受信に必要な全てのサービスを起動します。
multi-user.target
ネットワークとマルチユーザに対応した環境を起動します。
reboot.target
システムを再起動します。
rescue.target
ネットワーク機能無しのシングルユーザモードを起動します。
System V init ランレベルデーモンとの互換性を維持する目的で、 systemd
では runlevel
のような名前のターゲットが用意されています。それぞれ
X
.targetX
の部分がランレベルの番号に対応します。
表8.3 System V のランレベルと systemd
のターゲットユニット
System V ランレベル |
|
用途 |
---|---|---|
0 |
|
システムのシャットダウン |
1, S |
|
シングルユーザモード |
2 |
|
ネットワーク機能無しのマルチユーザ環境 |
3 |
|
ネットワーク機能のあるマルチユーザ環境 |
4 |
|
未使用、または独自に定義して使用するもの |
5 |
|
ネットワークとディスプレイマネージャを起動するマルチユーザ環境 |
6 |
|
システムの再起動 |
systemd における /etc/inittab の有効性について | |
---|---|
SysV init のシステムにおけるランレベル管理は |
下記のコマンドを使用することで、ターゲットユニットを操作することができます:
処理 |
|
SysV init でのコマンド |
---|---|---|
現在のターゲット/ランレベルの変更 |
systemctl isolate |
telinit |
既定のターゲット/ランレベルの変更 |
systemctl default |
n/a |
現在のターゲット/ランレベルの取得 |
systemctl list-units --type=target
|
who -r or runlevel |
既定のランレベルに対する恒久的な変更 |
YaST のランレベルエディタを使用するか、もしくは下記のコマンドを実行する: ln -sf /lib/systemd/system/ |
YaST のランレベルエディタを使用するか、もしくは id: |
システム起動時にランレベルを指定する |
システム起動時に、下記のようなオプションを指定する systemd.unit= |
システム起動時に、ランレベルの番号を指定する |
ターゲットやランレベルの依存関係を表示する |
systemctl show -p "Requires" systemctl show -p "Wants" 「Requires」 を指定すると、ハード依存関係 (必ず解決されなければ ならない依存関係) を表示します。 「Wants」 を指定すると、 ソフト依存関係 (可能であれば解決されるべき依存関係) を表示します。 |
n/a |
System V init による SUSE システムでは、ランレベル 4 を利用で独自のランレベル
設定を構築できるようになっていました。 systemd
では、独自のターゲットを作成
することで、任意の数だけ独自の設定を構築することができます。なお、独自の
ターゲットを構築する場合は、 graphical.target
など
既存のターゲットに追加する形で構築することをお勧めします。
カスタマイズ作業時の注意 | |
---|---|
|
手順8.1 独自のターゲットの作成
まずは /lib/systemd/system/graphical.target
の設定ファイルを、
/etc/systemd/system/
にコピーします。名前は必要に応じて修正してください。
<ターゲット名>
.target
以前のステップでコピーした設定ファイルは、既に必須とする (「ハード」)
依存関係を構築してある状態になっています。可能であれば解決しておくべき
依存関係 (「ソフト」) を構築したい場合は、
/etc/systemd/system/
という名称のディレクトリを作成してください。
<ターゲット名>
.target.wants
あとは /etc/systemd/system/
ディレクトリ内に、 <ターゲット名>
.target.wants/lib/systemd/system
からのシンボリックリンクを
作成することで、ソフト依存関係を設定することができます。
ターゲットの設定が完了したら、あとは新しいターゲットを利用できるように
するため、 systemd
に対して設定の再読み込みを指示します:
systemctl daemon-reload
systemd
には、システムの起動処理を分析できる機能が用意されています。
この機能により、全てのサービスに対する状態を
(/var/log
を確認する
方法よりは) 便利に確認することができます。また systemd
では、起動処理を
調査して、サービスの起動にかかっている時間を調べることもできます。
システムの起動後に開始されたサービスの一覧を確認するには、
systemctl とだけ入力します。すると、下記のように、
有効に設定されている全てのサービスが表示されます。特定のサービスに対して
詳細を読みたい場合は、 systemctl status
<サービス名>
.service と入力
してください。
例8.1 有効なサービスの一覧表示
jupiter.example.com: ~ # systemctl UNIT LOAD ACTIVE SUB JOB DESCRIPTION [...] systemd-random-seed-load.path loaded active waiting Random Seed acpid.service loaded active running ACPI Event Daemon apache2.service loaded failed failed apache avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack bluez-coldplug.service loaded active exited LSB: handles udev coldplug of bluetooth dongles console-kit...-system-start.service loaded active exited Console System Startup Logging cron.service loaded active running Command Scheduler cups.service loaded active running CUPS Printing Service [...] LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. JOB = Pending job for the unit. 107 units listed. Pass --all to see inactive units, too.
起動に失敗したサービスだけを表示したい場合は、 --failed
オプションを指定してください:
例8.2 起動に失敗したサービスの表示
jupiter.example.com: ~ # systemctl --failed UNIT LOAD ACTIVE SUB JOB DESCRIPTION apache2.service loaded failed failed apache NetworkManager.service loaded failed failed Network Manager plymouth-start.service loaded failed failed Show Plymouth Boot Screen [...]
システムの起動にかかった時間をデバッグしたい場合、 systemd
では
systemd-analyze というコマンドが用意されています。
これは全体の起動時間や起動時間順のサービス一覧を表示することができるほか、
他のサービスの起動時間と対比するために利用することのできる、 SVG 画像を
生成することもできます。
jupiter.example.com: ~ # systemd-analyze Startup finished in 2666ms (kernel) + 21961ms (userspace) = 24628ms
jupiter.example.com: ~ # systemd-analyze blame 6472ms systemd-modules-load.service 5833ms remount-rootfs.service 4597ms network.service 4254ms systemd-vconsole-setup.service 4096ms postfix.service 2998ms xdm.service 2483ms localnet.service 2470ms SuSEfirewall2_init.service 2189ms avahi-daemon.service 2120ms systemd-logind.service 1210ms xinetd.service 1080ms ntp.service [...] 75ms fbset.service 72ms purge-kernels.service 47ms dev-vda1.swap 38ms bluez-coldplug.service 35ms splash_early.service
jupiter.example.com: ~ # systemd-analyze plot > jupiter.example.com-startup.svg
上述のコマンドを利用することで、サービスの開始とそれにかかる時間を確認する
ことができます。さらに詳しい情報を読みたい場合は、 systemd
に対して
起動処理に対する冗長ログを採取するように設定します。具体的には、システムの
起動時に、起動パラメータに下記の値を指定します:
systemd.log_level=debug systemd.log_target=kmsg
上記を設定すると、 systemd
はログメッセージをカーネルのリングバッファに
書き込むようになります。閲覧の際は dmesg コマンドを
ご利用ください:
dmesg | less
下記の章では、システム管理者に対してより高度な作業内容を示しています。 本章よりもさらに高度なドキュメンテーションについては、 Lennart Poettering 氏 による systemd の資料 (http://0pointer.de/blog/projects) (英語) をお読みください。
8.1.2項 「サービスのデバッグ」 では、それぞれの
サービスに対してログを閲覧するための方法を示してきましたが、ログメッセージは
サービスからのものだけであるとは限りません。 systemd
が記録した全てのログ
メッセージ (「ジャーナル」 と呼びます) に対するアクセス方法も用意
されています。最も古いログから始まる、全てのログを表示するには、
systemd-journalctl コマンドをお使いください。なお、
フィルタの適用や出力形式の変更について、詳しくは man 1
systemd-journalctl で表示されるマニュアルページをお読みください。
systemd
には、現在の状態を名前付きのスナップショットと
して保存し、後から isolate サブコマンドでその状態に戻す機能が
用意されています。これは元に戻すことができることから、サービスや独自のターゲットの
テストに便利な仕組みです。なお、スナップショットは現在のセッションに対してのみ有効で、
システムを再起動すると自動的に削除されます。また、スナップショットの名前は
.snapshot
で終わるものでなければなりません。
systemctl snapshot <スナップショット名>
.snapshot
systemctl delete <スナップショット名>
.snapshot
systemctl show <スナップショット名>
.snapshot
systemctl isolate <スナップショット名>
.snapshot
従来の SysV init システムでは、起動されるサービスに対して、明確なプロセス 設定を行なうことができませんでした。 Apache などのように、サードパーティ製の プロセス (CGI や Java のプロセス) を多数起動し、サードパーティ製のプロセス 自身もプロセスを生成するようなシステムの場合は、プロセスに対する制御を 明示的に行なうことが難しい場合があるほか、場合によっては不可能であることも あります。またそれに加えて、子プロセスを残したまま終了してしまい、結果として サービスが正しく終了しないことも考えられます。
systemd
では、そのような問題を cgroups を利用することで解決しています。
cgroups はプロセスをまとめて管理するためのカーネルの機能で、全ての子プロセスを
階層構造で管理します。 systemd
では、サービスに対して別々の cgroup を
設定します。非特権プロセスでは cgroup を変えることができないため、サービス
から起動したプロセスがどれなのかを、簡単に判別できるようになる、という仕組みです。
サービスに属する全てのプロセスを表示するには、 systemd-cgls コマンドを使用します。実行すると、下記のように (一部省略しています) 表示されます:
例8.3 サービスに属する全プロセスの表示
~ # systemd-cgls --no-pager ├ user │ └ root │ └ 1 │ ├ 2279 sshd: root@pts/0 │ ├ 2282 -bash │ └ 2541 systemd-cgls --no-pager └ system ├ 1 /sbin/init splash showopts ├ apache2.service │ ├ 2535 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start │ ├ 2536 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start │ ├ 2537 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start │ ├ 2538 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start │ ├ 2539 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start │ └ 2540 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D SYSTEMD -k start ├ xdm.service │ ├ 2250 /usr/bin/xdm │ ├ 2253 /usr/bin/X -nolisten tcp -br vt7 -auth /var/lib/xdm/authdir/authfiles/A:0-ii8Goo │ ├ 2263 -:0 │ └ 2276 /usr/bin/xconsole -notify -nostdin -verbose -exitOnFail ├ ntp.service │ └ 2202 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -c /etc/ntp.conf ├ sshd.service │ └ 1743 /usr/sbin/sshd -D
cgroups について、詳しくは 第10章 カーネルのコントロールグループ (↑システム分析とチューニングガイド) をお読みください。
8.3.3項 「カーネルのコントロールグループ (cgroups)」 で説明したとおり、 SysV init のシステムでは親プロセスを判断することが不可能になってしまうことがありました。 このような状態になってしまうと、サービスから起動された多数のプロセスがわからなく なってしまい、子プロセスはゾンビプロセスとして残ってしまいます。
systemd
の cgroups 管理の仕組みにより、サービスから起動された子プロセスを
容易に判別し、それらに対してまとめてシグナルを送信することができます。
サービスに対してシグナルを送信する場合は、 systemctl
kill コマンドをお使いください。利用可能なシグナルの一覧は、
man 7 signals コマンドで表示することができます。
SIGTERM
の送信
SIGTERM
は、シグナルを送信する際の既定のシグナルです。
systemctl kill <サービス名>
.service
SIGNAL
の送信
-s
オプションを利用することで、送信するシグナルを指定すること
ができます。
systemctl kill -sSIGNAL
<サービス名>
.service
既定では、 kill コマンドは指定した cgroup 内の
all
(全ての) プロセスに対してシグナルを送信します。
systemd
では、 control
(制御) または
main
(メイン) のプロセスに対してだけ送信することもできます。
後者の場合は、特に SIGHUP
を送信して設定を
再読み込みさせるような場合に有効です:
systemctl kill -s SIGHUP --kill-who=main <サービス名>
.service
systemd
に対してさらに詳しい情報をご希望の場合は、下記のオンラインリソースを
お読みください (いずれも英語です):
systemd
for Administrators
systemd
の著者のうちの 1 人、 Lennart Pottering 氏によるブログにも、
詳しい説明が書かれています。本章記述時点では 13 個の投稿があります。
http://0pointer.de/blog/projects
からお読みください。
systemd
Linux init systemhttp://www.h-online.com/open/features/Control-Centre-The-systemd-Linux-init-system-1565543.html
systemd
, a Linux init toolhttp://www.h-online.com/open/features/Booting-up-Tools-and-tips-for-systemd-1570630.html