twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Systemd の run レベルとサービス管理コマンド入門

Systemd の run レベルとサービス管理コマンド入門

原文はこちらです。

Linux kernel unified hierarchy cgroups and systemd.svg

昔、ランレベルは固定でした。”systemd” は、より柔軟で動的なシステム制御方式を提供します。

“systemd” の話に入る前に、メモリ レーンに関して多少触れておきます。Linux 世界には、この変てこな 2 つのレーンがあります。ここでは、Linux と FOSS が常に押し合いへし合いしています。そして、人々はいつもそれに不満を持っています。これが、私が反 ”systemd” 派の叫びを塩を持って追い出したい理由です。以下のような話を聞くと、特にそうです。

  • パッケージは最悪。本当の Linux ユーザーは、すべてをソース コードからビルドして、システム上にあるすべてのものを知っている必要がある。
  • 依存性を解決してくれるパッケージ管理は最悪。真のLinux ユーザーは、依存性を手動で解決すべき。
  • apt-get はましだが、それ以外は、つまり、”yum” は、最悪。
  • なぜって、Red Hat は、Linux 界のマイクロソフトだから。
  • Ubuntu 万歳
  • Ubuntu いぇーい。

何回も話してきたように、変更は混乱を招きます。変更は仕事を混乱させます。小さいことではありません。生産性を損なうからです。しかし、コンピューターは、まだ幼児期にいるのです。これからも、変化と進化を続けて行きます。何か、物、たとえば、レンチや家具の部品、フラミンゴのオーナメントを買ったら最後、それは将来も変わりなく続くと思い込んでしまう人がいます。いまだに Windows VISTA を走らせている人や、古臭い PC と CRT モニターで Windows95 を走らせている人や、まだ動作するのに置き換えるのを理解できない人がいます。

これらは、もう廃棄すべき古いコンピューターなのに、取っておいたりしたことを思い出させます。友達の 1 人は、MS-DOS の古いバージョンを古い 286 マシンで動かしていました。彼女は、予約や日記、彼女のために私が BASIC で書いた小切手管理プログラムを実行するために、それを使っていました。セキュリティ アップデートですか?ネットワークにはつながっていません。時おり、抵抗、コンデンサー、電源、そして CMOS 用バッテリーを取り換えていました。長い間動き続けていました。CRT モニターは少しずつ暗くなっていき、20 年以上働いたあとで、遂に寿命を迎えました。現在、彼女は、同じことをするのに、古い Thinkpad で Linux を走らせています。

閑話休題 。”systemd” に戻りましょう。

ランレベルと”状態”

“SysVinit” は、異なる状態へブートするために静的なランレベルを使用します。大半のディストロは、次の 5 つを使っています。

  • シングルユーザー モード
  • ネットワーク サービスがないマルチユーザー
  • ネットワークサービスがあるマルチユーザー
  • システム シャットダウン
  • システム リブート

私は、ランレベルを複数持つことの利点がわかりませんが、現実に存在します。”systemd” は、ランレベルの代わりに、”状態”という考え方を用意しています。これは、ブート用の異なるコンフィギュレーション生成に柔軟性を与えるものです。この”状態”は、ターゲットに関連付けられた複数のユニット ファイルから構成されます。ターゲットは、単なる数字ではなく、名前を持ちます。ユニット ファイルは、サービス、デバイス、ソケットそしてマウントを制御します。”systemd” に付属する雛形を見ることで、これらがどのようなものかを理解できるでしょう。例えば、CentOS 7 の標準である /usr/lib/systemd/system/graphical.target では、

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes
[Install]
Alias=default.target

ユニット ファイルは、どのようなものでしょうか。ユニット ファイルは、2 つのディレクトリに格納されています。

  • /etc/systemd/system/
  • /usr/lib/systemd/system/

前者のディレクトリは、我々が触れるもので、後者のディレクトリには、パッケージがユニット ファイルをインストールします。 /etc/systemd/system は /usr/lib/systemd/system より優先されます。以下が ”Apache” のユニット ファイルです。

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd/ $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi.user.target

これらのファイルは、”systemd” 入門者にとって理解しやすいものです。ユニット ファイルは、”SysVinit” の init ファイルよりシンプルにできています。下記は /etc/init.d/apache2 から抜き出したものです。

SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if [ -n "$APACHE_CONFDIR" ] ; then
	if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
	        DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
	else
	        DIR_SUFFIX=

全体で 410 行あります。

ユニット間の依存関係を見ることができます。それは、驚くほど複雑です。

$ systemctl list-dependencies httpd.service

cgroup

cgroup (コントロール グループ) は、数年前に Linux カーネルに採用されましたが、”systemd” 登場まで、有効に使われたとは言えません。カーネル ドキュメントには、”コントロール グループは、タスクの集合と子タスクを集めたり、分割したりして、特定の動作ができるように階層構造にする” と書かれています。言い換えれば、複数の方法でリソースを制御したり、制限したり、割り当てたりできるのです。”systemd” は cgroup を使います。以下のようにして、cgroup のツリーを表示させることができます。

$ systemd-cgls

ps” コマンドで、別の表示をさせることができます。

$ ps xawf -eo pid,user,cgroup,args

 

有用なコマンド

次のコマンドは、”systemd” のサービスファイルではなくデーモンのコンフィギュレーション ファイルのリロードを行います。コンフィギュレーションを変更し、システムを再起動することなく適用したい時に使います。”Apache” の例を見てみましょう。

# systemctl reload httpd.service

サービス ファイルのリロードにより、サービスの停止と再開を行います。もしサービスが動いていなかったら、開始します。

# systemctl restart httpd.service

すべてのデーモンを 1 つのコマンドで再実行できます。すべてのユニット ファイルのリロードを行い、”systemd” の依存関係ファイルをすべて再構築します。

# systemctl daemon-reload

通常の非特権ユーザーとして、リブート、サスペンド、電源断ができます。

$ systemctl reboot
$ systemctl suspend
$ systemctl poweroff

“systemd” について学ぶことはまだまだあります。”Here We Go Again, Another Linux Init:Intro to systemd” と ”Understanding and Using Systemd (日本語訳: 「systemd を理解し、使いこなす」)” は、参考文献へのリンクを多数掲載している良い入門書です。

Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ


Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!