今回はsystemd及びsystemctlコマンドについて説明します。
以前別の記事にてinitの説明に付随してSysVinitというシステム起動の仕組みについても説明しました。今回のsystemdはSysVinitよりも新しく、現在主流で使用されている仕組みとなります。
systemdの機能についてはかなりの項目量が有るので、細かい説明は省略し、どのような機能やコマンド、仕組みの違いが有るのかについて説明しようと思います。
SysVinitに対してsystemdが仕組みとしてどのような違いがあるのかを下記に示します。
①一番最初に起動されるプロセスがinitからsystemdとなっている。なのでPID1のプロセスがsystemd。
②SysVinitはプロセス一つ一つを順番に処理していくが、systemdは依存関係等を考慮しつつ同時並列に処理していくことができるため、起動が早い。
③systemdは「Unit」と呼ばれる単位で処理を分割している。(詳細は後で説明)
上記③の「Unit」についてですが、様々な種類が有るので下記に一覧を示します。
Unit一覧
service・・・各種サービスを起動。
device・・・各種デバイスを表示する。
mount・・・ファイルシステムをマウントする。(/etc/fstabより自動作成)
swap・・・スワップ領域を有効にする。(/etc/fstabより自動作成)
target・・・複数のユニットをグループ化する。
socket・・・特定のソケットを監視し、接続があるとサービスを起動する。
timer・・・サービスの起動を予約する。
SysVinitにおけるランレベルに相当するのが「target」になります。
例えばランレベル3は「multi-user.target」、ランレベル5は「graphical.target」となります。
ランレベル0~6がどの「target」が該当するのか、一覧を下記に示します。
ランレベル0→poweroff.target・・・システム終了
ランレベル1→rescue.target・・・シングルユーザーモード
ランレベル2、3、4→multi-user.target・・・マルチユーザーモード
ランレベル5→graphical.target・・・グラフィカルログインモード
ランレベル6→reboot.target・・・再起動
次にsystemdにてサービスの起動や設定、ターゲットの変更等を行うための「systemctl」コマンドについて説明していきます。
「systemctl」コマンドの書式、サブコマンド、オプションを下記に示します。
systemctl サブコマンド [Unit名] [オプション]
サブコマンド一覧
start・・・Unitを起動
stop・・・Unitを停止
restart・・・Unitを再起動
status・・・Unitの状態表示
enable・・・Unitを自動起動するようにする
disable・・・Unitを自動起動しないようにする
is-active・・・Unitの起動状態を確認する
kill・・・Unitへシグナルを送信する
list-units・・・起動中のUnitをすべて表示
reboot・・・再起動
poweroff・・・システム終了
get-default・・・最初に起動する「target」設定を確認する
set-default target名・・・最初に起動する「target」設定を設定する
isolate・・・現在の「target」を変更する
オプション
--type 種類・・・Unitの種類を指定
--all・・・Unitを全表示(起動しているかどうか関係無く)
--no-pager・・・ページャを使って表示しない(systemctlはデフォルトでページャで表示)
サービスやデーモンプロセスの自動起動設定や「target」の初期設定変更等、様々な設定変更を行うために「systemctl」コマンドは必須なので覚えておいた方が良いです。
例えばApccheのUnitである「httpd.service」を起動するのであれば「systemctl start httpd」と入力・実行すれば起動できます。
また、現在の「target」を「graphical.target」へ変更したいのであれば「systemctl isolate graphical.target」と入力・実行すればグラフィカルログインモードになります。
今回は「systemd」や「systemctl」の基本的な説明をさせていただきました。
参考資料
・中島能和(2020)『CentOS 徹底入門 第4版』株式会社翔泳社