🦁

Ubuntu Server 環境構築(systemd篇)

に公開

現在のほとんどのUbuntuのバージョン(16.04以降)では、systemdは既に標準で組み込まれ、システム起動やサービス管理の中核を担っています。

そのため、ユーザーが特別に「systemdをインストールする」という操作を行う必要は通常ありません、最小インスールした場合は、手動でインストールする必要があります。

sudo apt update -y
sudo apt install systemd -y

systemdの主な用途と機能

systemdは、Linuxシステムにおける「initシステム」と「サービスマネージャ」の役割を果たすもので、その用途はシステム全体の管理と運用に及びます。

1. システムの起動管理(Initシステムとしての役割)

  • 起動処理の制御: PCの電源投入後、最初に起動するプロセス(PID 1)として動作し、カーネルがロードされた後にシステムを正しく動作させるための初期化処理全般を担います。
  • 並列処理による高速化: 従来のinitシステム(SysVinitなど)に比べて、サービスを並列で起動できるため、システム起動時間を大幅に短縮します。
  • 依存関係の解決: サービス間の依存関係を自動で管理し、必要なサービスが起動してから次のサービスを起動するといった処理を確実に行います。

2. サービス(デーモン)の管理(サービスマネージャとしての役割)

  • サービスの操作: Webサーバー(Apache, Nginx)やデータベース(MySQL, PostgreSQL)などのバックグラウンドプロセス(デーモン)の起動、停止、再起動、ステータス確認などを一元的に行います。この操作には主にsystemctlコマンドを使用します。
  • 自動起動設定: システム起動時にどのサービスを自動で立ち上げるかを管理します。
  • 監視と復旧: サービスがクラッシュした場合に、自動的に再起動させるといった監視・回復機能を提供します。

3. その他の統合的なシステム管理機能

  • ログ管理(Journald): システムやサービスのログを一元的に管理します。ログの確認にはjournalctlコマンドを使用します。
  • ターゲット(ランレベル)管理: サーバーモードやグラフィカルモードなど、システムの状態を「ターゲット」として定義し、切り替える機能を提供します。
  • リソース管理: プロセスやサービスのリソース使用量(CPU、メモリなど)を制限・管理する機能(cgroups)と統合されています。

🇯🇵 systemdがUbuntuにインストールされ(標準で組み込まれています)、有効になっていることで、システム管理において非常に重要な役割を果たす以下の主要なコマンド群が使えるようになります。

Systemdの主要なコマンド

1. サービス管理: systemctl

systemctlは、システムで実行されているサービス(デーモン)やユニット全般を管理するための中心的なコマンドです。

コマンド 用途
systemctl start [ユニット名] サービスの起動(例: systemctl start nginx.service
systemctl stop [ユニット名] サービスの停止
systemctl restart [ユニット名] サービスの再起動
systemctl status [ユニット名] サービスの現在の状態(実行中か、エラーはないかなど)を確認
systemctl enable [ユニット名] システム起動時にサービスを自動的に起動するように設定
systemctl disable [ユニット名] システム起動時の自動起動を無効化
systemctl is-enabled [ユニット名] サービスが自動起動に設定されているかを確認
systemctl list-units 現在ロードされている全ユニット(サービス、ターゲットなど)の一覧を表示
systemctl list-unit-files 利用可能なユニットファイルの自動起動設定状態の一覧を表示

2. ログ管理: journalctl

journalctlは、systemdのログ収集デーモンであるJournaldによって収集されたシステムログを閲覧・操作するためのコマンドです。従来の/var/log/以下のファイルベースのログとは異なり、構造化されたログを一元管理します。

コマンド 用途
journalctl 全てのログを時系列で表示
journalctl -u [ユニット名] 特定のサービス(ユニット)に関連するログのみを表示
journalctl -f リアルタイムで新しいログを追跡(tail -fに相当)
journalctl --since "today" 特定期間以降のログを表示(例: "2 hours ago", "yesterday" など)
journalctl -p err 特定レベル(エラーや警告など)のログのみをフィルタリング表示

3. ホスト・システム情報管理: hostnamectl, timedatectl, localectl

システム全体の設定や情報を管理するためのユーティリティコマンドです。

  • hostnamectl: ホスト名やOSの情報を表示・設定します。
    • 例: hostnamectl set-hostname new-name
  • timedatectl: システムの時刻、タイムゾーン、NTP(ネットワーク時刻同期)設定を表示・管理します。
    • 例: timedatectl set-timezone Asia/Tokyo
  • localectl: システムのロケール(言語設定)やキーボードレイアウトを表示・設定します。
    • 例: localectl set-locale LANG=ja_JP.UTF-8

これらのコマンドは、systemdが提供する「initシステム」と「サービスマネージャ」という役割を具体的に操作するために用いられます。

Discussion