Linuxサーバーやデスクトップの運用が高度化する中、システムサービスの起動・監視・管理に求められる機能も複雑化しています。従来はシェルスクリプトでサービスを個別管理していましたが、障害対応や自動復旧、ログ集約、資源(CPU・メモリ)の制御といった要求に応じるには限界がありました。systemdはこうした現場の課題を統合的に解決するために生まれ、現在では主要なLinuxディストリビューションに標準採用されています。起動速度の高速化、宣言的な構成管理、堅牢なリソース分離と死活監視、一元化ログなど、その機能群は日常運用から障害対応まで多様な場面で活用されています。
systemdは、現代の主要Linuxディストリビューションでデフォルト採用されているシステムおよびサービスマネージャです。起動プロセスの一元管理により高速なブートと柔軟なサービス制御を実現します。
systemdは従来のSysVinitやUpstart等のinitシステムが抱える課題(直列処理・可用性・管理複雑性)を解決するため開発されました。並列起動と強力な依存関係解決、ユニットファイルによる統一的サービス定義、豊富な追加機能(ログ管理、タイマー、ネットワーク管理等)が特長です。
systemdは「ユニット(unit)」というファイル群で各種リソースを管理します。主な種類は以下の通りです。
すべてテキストファイルで記述し、/etc/systemd/system/
等に配置します。
systemctlコマンドで各種ユニットを制御します。
・サービス起動
sudo systemctl start nginx
・サービス停止
sudo systemctl stop nginx
・サービス再起動
sudo systemctl restart nginx
・サービス状態確認
systemctl status nginx
・自動起動有効化
sudo systemctl enable nginx
・ログ閲覧
journalctl -u nginx
以下は自作シェルスクリプトをsystemdサービスとして登録するサンプルです。
[Unit]
Description=My Sample Application
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/myapp.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
作成後は、以下で、リロード->有効化->開始ができます。
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service
比較項目 | systemd | SysVinit |
---|---|---|
起動方式 | 並列実行、依存関係自動解決 | 直列実行、依存関係手動管理 |
サービス定義 | ユニットファイルによる柔軟な設定 | シェルスクリプト |
ログ管理 | journaldの集中管理・高機能 | 各サービスごとに分散ログ |
拡張性 | タイマー、ネットワーク、DNS等多機能内蔵 | 拡張は別途ツール導入 |
互換性 | SysVスクリプト互換、他initと選択可能 | 他initとも若干の互換性 |
systemdはその多機能性ゆえ「肥大化している」「UNIX哲学と矛盾する」という批判も受けています。OpenRCやrunitなど他initを選べるディストリビューションも一部存在しますが、主要Linuxでは2020年代以降ほぼ標準です。
systemdはLinux運用現場で必要不可欠な知識です。高速な起動、柔軟かつ強力なサービス管理、一元的なログ・コンポーネント管理を通じて、システム管理の標準となっています。systemdはLinuxサービス・プロセス管理の標準であり、高速起動や効率的な運用、障害復旧の基盤として重要です。本記事では、現場で活躍するためのsystemd基礎から設定や運用例までを体系的に解説します。