systemdとは?systemctlコマンドとは

systemdとは?

systemdは最初に起動されるプログラムです。systemdは他のデーモン・サービスの起動タイミングや順序などを管理する重要なプログラム群です。

systemd以前はSysV initが使われていましたが、並列処理ができるsystemdは高速起動が可能であるなどの利点があります。

今回はsystemdについて紹介していきます。

systemdとは?どんな役割があるのか?

sysytemdはカーネルによって起動される一番最初のプロセスです。そのため、プロセスIDは1です。

systemdのプロセス

systemdのプロセス

プロセスはCPUによって実行されるプログラムそのものです。一つのアプリケーションに複数のプロセスが存在する場合があります。デーモンとはバックグラウンドで動くプロセスで常に待機しています。httpdやsshdもデーモンです。systemdはシステム管理デーモンです。

デーモンとサービスデーモンとは?サービスと同じ?

systemdはすべてのデーモンを管理するデーモンです。sysytemdが親となって子プロセスが開始されます。

プロセスツリーの頂点にsystemdがある

プロセスツリーの頂点にsystemdがある。systemdは全てのプロセスの親プロセスで他のプロセスの起動を行い管理している。

systemdのように他のプログラムを動かす親的なプログラムのことをinitプロセスと呼びます。かつては後述するSystem V ・initが使われていました。

System V ・initからの移行

systemdは現在、多くのディストリビューションで採用されているinitプロセスです。

かつてはSystem V・initが使われていましたが

  • 一つ一つ順番に起動(直列処理)のため遅い
  • 設定ファイルがシェルスクリプトで管理され複雑

こうした課題を解決するために不要なサービスを起動せず、並列的にサービスを起動できるようにすることで起動を高速化するsystemdが登場します。

サービスには依存関係があります。依存関係とはあるプログラムが起動・存在している関係のことです。

例えばネットワーク通信を利用するサービス(webサーバ)を開始する場合、ネットワーク通信を開始するサービスよりも早く起動しても意味がないため、network -> webserverというような起動の順番になります。このような依存関係もsystemdは管理しており、起動の順番を制御したり、依存関係にあるサービスの起動が失敗したら起動しないなどの管理を行います。

systemdに対する批判もありますが、事実上sysytemdはSysV initの後継となっています。

Rethinking PID 1 (0pointer.de)

systemctlコマンド

systemdでは起動や状態確認などをsystemctlコマンドで行います。

  • sysetmctl start service名 サービスの起動
  • sysetmctl stop service名 サービスの停止
  • sysetmctl restart service名 サービスの再起動
  • sysetmctl status service名 サービスの状態確認
  • sysetmctl reload service名 サービスの設定読み込み
  • sysetmctl enable service名 サービスの自動起動有効
  • sysetmctl disable service名 サービスの自動起動無効
    • sysetmctl list-units  ユニットの一覧を表示
    • systemctl list-unit-files サービスの自動起動状態を確認
  • systemctl get-default デフォルトターゲットの確認
  • systemctl set-default graphical.target デフォルトターゲットの変更

これらのコマンドがあります。

systemctlコマンドはD-BUSというメッセージバスと呼ばれるアプリケーションとアプリケーションとのやりとりを行う仕組みを介してsystemdとやりとりします。

ターゲットの変更(ランレベル)

initdで使われていたランレベルに相当するものをsystemdではターゲットと呼びます。詳しくは以下のページを参照してください。

ターゲット・ランレベルとは?ターゲット (ランレベル)とは?設定の方法

ターゲットを変更するには

# systemctl set-default multi-user.target

ターゲットの確認は

# systemctl get-default

で確認します。

ユニット

systemdには12のユニットと呼ばれる単位でシステムを管理します。

systemdはユニットの中のdefalt.targetを頂点としてユニットを起動していきます。

  • Service:デーモンの起動などの管理
  • Target : ユニットのグループ
  • Automount:自動マウント
  • Device:デバイスの検知
  • Mount:ファイルシステムのマウントポイントを制御
  • Path:ファイル変更時などにユニットをトリガー
  • Scope: 外部作成のプロセス
  • Slice :システムプロセスを管理するユニットグループ
  • Snapshot :systemd ユニットの状態を保存・復元する
  • Socket:ソケットからの通信
  • Swap:メモリースワップをカプセル化
  • Timer :タイマーによって他のユニットをトリガーする

コメントを残す

メールアドレスが公開されることはありません。