
systemd 精靈
程式 systemd 是程序 ID 為 1 的程序。負責以所需的方式啟始化系統。systemd 由核心直接啟動並拒絕訊號 9,該訊號通常會終止程序。所有其他程式不是由 systemd 直接啟動,就是由它的子程序啟動。
從 SUSE Linux Enterprise Desktop 12 起,systemd 取代了常用的 System V init 精靈。systemd 與 System V init 完全相容 (透過支援 init 程序檔)。systemd 的其中一個主要優點在於它透過積極主動的平行服務啟動,使開機速度顯著加快。另外,systemd 僅在切實需要服務時才會啟動該服務。它在開機時不會無條件地啟動精靈,而是在第一次需要時予以啟動。systemd 還支援「核心控制群組」(cgroup),對系統狀態拍攝快照並還原等等。如需詳細資料,請參閱http://www.freedesktop.org/wiki/Software/systemd/。
本節將詳細討論 systemd 背後的概念。
systemd 是適用於 Linux 的系統和工作階段管理員,它與 System V 及 LSB init 程序檔相容。主要功能如下:
提供積極主動的平行化功能
使用插槽及 D-Bus 啟用方式來啟動服務
提供精靈的隨需啟動
使用 Linux cgroup 追蹤程序
支援對系統狀態拍攝快照並還原
維護掛接點和自動掛接點
實作事務相關型複雜的服務控制邏輯
單位組態檔案針對以下項目的資訊進行編碼︰服務、插槽、裝置、掛接點、自動掛接點、交換檔或分割區、啟動目標、所監視之檔案系統的路徑、受 systemd 控制和監督的計時器、暫時系統狀態快照、資源管理片段或外部建立的程序群組。「 單位檔案」是 systemd 用於表示下列項目的通用術語︰
服務. 程序相關資訊 (例如執行精靈);檔案名以 .service 結尾
目標. 用於將單位分組以及在啟動期間用作同步點;檔案名以 .target 結尾
插槽.
IPC 或網路插槽或檔案系統 FIFO 的相關資訊,適用於插槽型啟動 (如 inetd);檔案名以 .socket 結尾
路徑. 用於觸發其他單位 (例如,在檔案變更時執行服務);檔案名以 .path 結尾
計時器. 受控計時器的相關資訊,適用於計時器型啟動;檔案名以 .timer 結尾
掛接點. 通常由 fstab 產生器自動產生;檔案名以 .mount 結尾
自動掛接點. 檔案系統自動掛接點的相關資訊;檔案名以 .automount 結尾
Swap. 用於記憶體分頁之交換裝置或檔案相關資訊;檔案名以 .swap 結尾
裝置. sysfs/udev(7) 裝置樹中所展示之裝置的相關資訊;檔案名以 .automount 結尾
範圍/片段. 分階層管理程序群組之資源的概念;檔案名以 .scope/.slice 結尾
如需有關 systemd.unit 的詳細資訊,請參閱 http://www.freedesktop.org/software/systemd/man/systemd.unit.html
System V init 系統使用若干個不同的指令來處理服務 — init 程序檔、insserv、telinit 及其他。systemd 可以簡化服務管理,因為對於大部分處理服務的任務,只需記住一條指令︰systemctl。它使用「
指令加子指令」表示法,與 git 或 zypper 相似︰
systemctl [general OPTIONS] subcommand [subcommand OPTIONS]
如需完整的手冊,請參閱 man 1 systemctl。
如果輸出進入終端機 (而不是進入管線或檔案之類),依預設,systemd 指令會將長輸出傳送到切換程式。使用 --no-pager 選項可關閉切換模式。
systemd 還支援 bash 完成法,它可讓您輸入子指令的第一個字母,然後按 →| 自動填全子指令。此功能僅可用於 bash 外圍程序,並且需要安裝套件 bash-completion。
用於管理服務的子指令與透過 System V init 管理服務的子指令相同 (start、stop、...)。下面列出了服務管理指令的通用語法︰
systemctl reload|restart|start|status|stop|... <my_service(s)>.service
rc<my_service(s)> reload|restart|start|status|stop|...
systemd 可讓您一次管理多個服務。它不是像 System V init 那樣依次執行 init 程序檔,而是執行類似如下的指令︰
systemctl start <my_1st_service>.service <my_2nd_service>.service
如果您要列出系統上可用的所有服務︰
systemctl list-unit-files --type=service
下表列出了 systemd 和 System V init 的最重要的服務管理指令︰
|
任務 |
systemd 指令 |
System V 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 還可讓您永久啟用或停用服務,使之可以按要求自動啟動,或者始終無法使用。此操作可以透過 YaST 或在指令行上執行。
下表列出了 systemd 和 System V init 的啟用和停用指令︰
在指令行上啟用服務時,服務不會自動啟動。系統將其排定為下一次系統啟動或執行層級/目標變更時啟動。若要在啟用服務之後立即啟動它,請明確執行 systemctl start <我的服務>.service or rc<我的服務> start。
|
任務 |
|
System V init 指令 |
|---|---|---|
|
啟用. |
|
|
|
停用. |
|
|
|
檢查. 顯示是否已啟用某個服務。 |
|
無 |
|
重新啟用. 與重新啟動服務相似,此指令先停用服務,然後再啟用該服務。若要使用服務的預設值重新啟用服務,可使用此任務。 |
|
無 |
|
遮罩. 「 停用」某項服務之後,仍然可以手動啟動它。若要徹底停用服務,您需要予以遮罩。使用須謹慎。 |
|
無 |
|
取消遮罩. 遮罩某項服務之後,惟有先將其取消遮罩,才能再次予以使用。 |
|
無 |
啟動系統和關閉系統的整個程序由 init 維護。從這個角度看,核心可以視為一個背景程序,負責維護所有其他的程序,以及根據其他程式的要求來調整 CPU 時間和硬體存取。
使用 System V init 時,系統將開機進入「
執行層級」。執行層級定義了系統的啟動方式,以及在所執行的系統中可以使用哪些服務。執行層級標有編號;最常見的執行層級是 0 (關閉系統)、3 (多重使用者,包含網路) 和 5 (多重使用者,包含網路及顯示管理員)。
systemd 透過使用「
目標單位」引入新的概念。不過,它仍然與執行層級概念完全相容。目標單位是有名稱而不是有編號的,它有多個作用。例如,目標 local-fs.target 和 swap.target 掛接本地檔案系統和交換空間。
目標 graphical.target 提供包含網路和顯示管理員功能的多重使用者系統,與執行層級 5 相當。複雜的目標,例如 graphical.target 透過結合其他目標的子集用作「
中繼」目標。因為 systemd 能夠組合現有目標,便於使用者更便利地建立自定目標,因此提供了可觀的靈活性。
下列清單顯示了最重要的 systemd 目標單位。如需完整清單,請參閱 man 7 systemd.special。
default.target
預設開機的目標。這並非「
真實」目標,而是一個符號連結,指向 graphic.target 之類的另一個目標。可透過 YaST 永久變更 (請參閱第 11.4 節「使用 YaST 管理 服務」)。若要為某個工作階段變更該目標,請在開機提示中使用核心指令行選項 systemd.unit=<我的目標>.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 提供了名為 runlevelX.target 的特殊目標,可映射至編號為 X 的相應執行層級。
如果您要知道目前的目標,請使用指令︰systemctl get-default
systemd 目標單位 #|
System V 執行層級 |
|
用途 |
|---|---|---|
|
0 |
|
關閉系統 |
|
1, S |
|
單一使用者模式 |
|
2 |
|
本地多重使用者,不包含遠端網路 |
|
3 |
|
完整的多重使用者,包含網路 |
|
4 |
|
未使用/使用者定義 |
|
5 |
|
完整的多重使用者,包含網路及顯示管理員 |
|
6 |
|
系統重新開機 |
/etc/inittab
System V init 系統中的執行層級在 /etc/inittab 中設定。systemd 不使用此組態。如需如何建立您自己的可開機目標的指示,請參閱第 11.5.3 節「建立自定目標」。
請使用下列指令來操作目標單位︰
|
任務 |
systemd 指令 |
System V init 指令 |
|---|---|---|
|
變更目前的目標/執行層級 |
|
|
|
變更為預設目標/執行層級 |
|
無 |
|
取得目前的目標/執行層級 |
對 systemd 而言,使用中的目標一般不止一個。該指令列出目前處於使用中狀態的所有目標。 |
或
|
|
永久性變更預設的執行層級 |
使用服務管理員或執行下列指令︰
|
使用服務管理員或變更以下行
(位於 |
|
變更目前開機程序的預設執行層級 |
在開機提示的選項中輸入下列文字:
|
在開機提示中輸入所需的執行層級編號。 |
|
顯示目標/執行層級的相依性 |
「Requires」 會列出硬相依性 (必須解析的相依性),而 「Wants」 則列出軟相依性 (可行時解析的相依性)。 |
無 |
systemd 針對系統啟動過程提供了分析方法。您可以方便地檢閱所有服務及其狀態的清單 (而不必剖析 /varlog/)。systemd 還允許您掃描啟動程序,以瞭解每項服務耗費多長時間啟動。
若要檢閱自從系統開機以來已啟動的完整服務清單,請輸入指令 systemctl。這將列出所有使用中的服務,如下方所述 (已縮短)。若要取得特定服務的更多資訊,請使用 systemctl status <我的服務>.service。
root # 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 選項︰
root # 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 圖,其中顯示各服務相對於其他服務所耗費的啟動時間。
root # systemd-analyze
Startup finished in 2666ms (kernel) + 21961ms (userspace) = 24628msroot # 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.serviceroot # systemd-analyze plot > jupiter.example.com-startup.svg
上述指令可用於檢閱已啟動的服務及其啟動所耗費的時間。如果您需要知道更多詳細資料,可以在開機提示中輸入下列參數,指示 systemd 詳細記錄完整的啟動程序︰
systemd.log_level=debug systemd.log_target=kmsg
現在,systemd 會將記錄訊息寫入核心環緩衝區。該緩衝區可透過 dmesg 檢視︰
dmesg -T | less
Systemd 與 System V 相容,因此,您仍可以使用現有的 System V init 程序檔。但是,至少有一個已知問題會導致 System V init 程序檔不能依原樣與 Systemd 配合使用:透過 init 程序檔中的 su 或 sudo 以其他使用者身分啟動服務,會導致程序檔失敗,從而產生「拒絕存取」錯誤。
使用 su 或 sudo 變更使用者時,會啟動 PAM 工作階段。完成 init 程序檔後會終止此工作階段。因此,init 程序檔啟動的服務也會終止。若要解決此問題,請執行下列步驟:
建立與 init 程序檔同名、副檔名為 .service 的服務檔案包裝程式。
[Unit] Description=DESCRIPTION After=network.target [Service] User=USER Type=forking1 PIDFile=PATH TO PID FILE1 ExecStart=PATH TO INIT SCRIPT start ExecStop=PATH TO INIT SCRIPT stop ExecStopPost=/usr/bin/rm -f PATH TO PID FILE1 [Install] WantedBy=multi-user.target2
以適當的值取代 UPPERCASE LETTERS 中寫入的所有值。
使用 systemctl start 應用程式.service 啟動精靈。
基本服務管理也可以透過 YaST 服務管理員模組實現。該模組不僅支援啟動、停止、啟用和停用服務,還可用於顯示服務的狀態以及變更預設目標。若要啟動 YaST 模組,請選取 › › 。
若要變更系統開機進入的目標,請從下拉方塊中選擇目標。最常用的目標是 (啟動圖形登入畫面) 和 (以指令行模式啟動系統)。
從表中選取服務。欄顯示它目前是在執行中 () 還是未執行 ()。其狀態可透過選擇進行切換。
如果啟動或停止服務,會變更其對目前執行中工作階段而言的狀態。若要在整個重新開機期間變更服務的狀態,您需要啟用或停用服務。
從表中選取服務。欄顯示它目前是還是。其狀態可透過選擇進行切換。
透過啟用或停用服務,可設定在開機期間是否啟動該服務 ( 或)。此設定不影響目前的工作階段。若要變更該服務在目前工作階段中的狀態,您需要予以啟動或停止。
若要檢視服務的狀態訊息,請從清單中選取該服務,然後選擇。所顯示的輸出與 systemctl 指令產生的輸出完全相同。
-l status <我的服務>
錯誤的執行層級設定可能會導致系統無法使用。在您套用變更之前,請務必確定您知道它們的後果。
systemd #
下列各節列出了 systemd 自定的一些範例。
請務必在 /etc/systemd/ 中而絕非 /usr/lib/systemd/ 中自定。否則,下次更新 systemd 時會覆寫您的變更。
systemd 服務檔案位於 /usr/lib/systemd/system 中。如果您要自定服務檔案,請執行下列步驟:
將要修改的檔案從 /usr/lib/systemd/system 複製到 /etc/systemd/system。保持檔案名稱不變。
根據需要修改 /etc/systemd/system 中的副本。
如需組態變更概觀,請使用 systemd-delta 指令。它會比較並識別哪些組態檔案覆寫其他組態檔案。如需詳細資料,請參閱 sleha-init man 頁面。
/etc/systemd 中修改過的檔案優先於 /usr/lib/systemd/system 中的原始檔案,前提是它們的檔案名稱相同。
如果您只想在組態檔案中新增若干行或修改一小部分,可以使用「放入式」檔案。放入式檔案可讓您延伸單位檔案的組態,而不必編輯或覆寫單位檔案本身。
例如,若要變更位於 /usr/lib/systemd/system/ foobar.service 中的 foobar 服務的一個值,請執行下列步驟:
建立名為 /etc/systemd/system/<我的服務>.service.d/ 的目錄。
注意字尾為 .d。該目錄必須命名為要透過所放入之檔案修補的服務。
在該目錄中,建立檔案 whatevermodification.conf。
確保該檔案僅包含待修改值所在的行。
將您所做的變更儲存到檔案中。它將用作原始檔案的延伸。
在 System V init SUSE 系統上並未使用執行層級 4,便於管理員自行建立執行層級組態。systemd 可讓您建立任意個自定目標。建議您在開始時先在 graphical.target 等現有的目標上調整。
將組態檔案 /usr/lib/systemd/system/graphical.target 複製到 /etc/systemd/system/<我的目標>.target,並根據需要調整該檔案。
上一步中複製的組態檔案已涵蓋該目標的必要的 (「
硬」) 相依性。若要一並納入需要的 (「軟」) 相依性,請建立目錄 /etc/systemd/system/<我的目標>.target.wants。
對於每個想要的服務,建立從 /usr/lib/systemd/system 指向 /etc/systemd/system/<我的目標>.target.wants 的符號連結。
目標設定完畢後,重新載入 systemd 組態以便能夠使用新目標︰
systemctl daemon-reload
下列各節涵蓋進階主題,適用於系統管理員。如需更為進階的 systemd 文件,請參閱 Lennart Pöttering 針對管理員撰寫的 systemd 系列文章,網址為 http://0pointer.de/blog/projects。
第 11.6.6 節「服務除錯」說明如何檢視給定服務的記錄訊息。然而,記錄的訊息顯示並不局限為服務記錄。您還可以存取和查詢 systemd 寫入的完整記錄訊息 — 亦即「日誌」。使用指令 systemd-journalctl 可顯示從最舊項目開始的完整記錄訊息。如需套用過濾器或變更輸出格式等選項的資訊,請參閱 man 1 systemd-journalctl。
您可以使用 isolate 子指令將 systemd 的目前狀態儲存到指定的快照,日後可以回復到該狀態。此功能在測試服務或自定目標時非常有用,因為它允許您隨時回到定義的狀態。快照僅在目前工作階段中可用,重新開機時將自動刪除。快照名稱必須以 .snapshot 結尾。
systemctl snapshot <my_snapshot>.snapshot
systemctl delete <my_snapshot>.snapshot
systemctl show <my_snapshot>.snapshot
systemctl isolate <my_snapshot>.snapshot
使用 systemd,可透過以下位置中的組態檔案,在開機時自動載入核心模組︰
/usr/lib/modules-load.d 和
/etc/modules-load.d
如需詳細資訊,請參閱 modules-load.d(5) 線上文件。
在傳統 System V init 系統上不一定能將程序明確指派給繁衍它的服務。有些服務 (例如 Apache) 會繁衍許多協力廠商程序 (例如 CGI 或 Java 程序),這些程序本身又會繁衍許多程序。這導致您很難明確指派,甚至根本無法明確指派。另外,服務在不當終止後,可能殘留其部分子項保持活動狀態。
systemd 將每個服務放入它自己的 cgroup 中,從而解決此問題。cgroup 是一個核心功能,允許將程序及其所有子項結集至分層組織的群組中。systemd 根據相應的服務為每個 cgroup 命名。由於程序未經特許不得「 離開」其 cgroup,因此這樣可以有效地使用服務名稱標記該服務繁衍的所有程序。
若要列出屬於服務的所有程序,請使用指令 systemd-cgls。結果類似於以下範例 (已縮短) ︰
root # systemd-cgls --no-pager
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
├─user.slice
│ └─user-1000.slice
│ ├─session-102.scope
│ │ ├─12426 gdm-session-worker [pam/gdm-password]
│ │ ├─15831 gdm-session-worker [pam/gdm-password]
│ │ ├─15839 gdm-session-worker [pam/gdm-password]
│ │ ├─15858 /usr/lib/gnome-terminal-server
[...]
└─system.slice
├─systemd-hostnamed.service
│ └─17616 /usr/lib/systemd/systemd-hostnamed
├─cron.service
│ └─1689 /usr/sbin/cron -n
├─ntpd.service
│ └─1328 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -c /etc/ntp.conf
├─postfix.service
│ ├─ 1676 /usr/lib/postfix/master -w
│ ├─ 1679 qmgr -l -t fifo -u
│ └─15590 pickup -l -t fifo -u
├─sshd.service
│ └─1436 /usr/sbin/sshd -D
[...]如需 cgroup 的詳細資訊,請參閱Chapter 8, Kernel Control Groups, System Analysis and Tuning Guide。
如第 11.6.4 節「核心控制群組 (cgroup)」中所述,在 System V init 系統中不一定能將程序指派給其父服務,導致難以終止服務及其所有子項。未終止的子程序將保留為廢止程序。
systemd 的理念在於將每個服務限制在 cgroup 中,從而得以明確識別服務的所有子程序,因此可讓您傳送信號給這些程序中的每個程序。可使用 systemctl kill 將信號傳送給服務。如需可用信號清單,請參閱 man 7 signals。
SIGTERM 傳送給服務
SIGTERM 是傳送的預設信號。
systemctl kill <my_service>.service
可使用 -s 選項指定應傳送的信號。
systemctl kill -s SIGNAL <my_service>.service
依預設,kill 指令會將信號傳送給指定 cgroup 的 all 程序。您可以將傳送目標限制為 control 或 main 程序。後者非常實用,如下例透過傳送 SIGHUP 強制服務重新載入其組態所示︰
systemctl kill -s SIGHUP --kill-who=main <my_service>.service
systemd 依預設不會過度記錄詳細資料。如果服務啟動成功,則不會產生任何輸出。如果啟動失敗,則會顯示簡短的錯誤訊息。不過,systemctl status 可讓您以不同方式對服務的啟動和作業進行除錯。
systemd 隨附自己的記錄機製 (「
日誌」),可以記錄系統訊息,便於您一併顯示服務訊息與狀態訊息。status 指令的工作方式與 tail 相似,也可以採用不同的格式顯示記錄訊息,因此成為功能強大的除錯工具。
只要服務啟動失敗,均可使用 systemctl status <我的服務>.service 來取得詳細的錯誤訊息︰
root #systemctl start apache2.service Job failed. See system journal and 'systemctl status' for details.root #systemctl status apache2.service Loaded: loaded (/usr/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>
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 的詳細資訊,請參閱下列線上資源︰
Lennart Pöttering 是 systemd 的原著者之一,他撰寫了一系列部落格文章 (寫本章時已有 13 篇),其網址為 http://0pointer.de/blog/projects。
systemd Linux init 系統http://www.h-online.com/open/features/Control-Centre-The-systemd-Linux-init-system-1565543.html
http://www.h-online.com/open/features/Booting-up-Tools-and-tips-for-systemd-1570630.html