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人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/11/28 2018年 11月 27日
  2. Today's Linux 2018/11/29 2018年 11月 28日
  3. Today's Linux 2018/12/03 2018年 12月 02日
  4. Today's Linux 2018/12/04 2018年 12月 03日
  5. Today's Linux 2018/12/06 2018年 12月 05日

Linux Foundationについて

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

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

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

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

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

乞うご期待!