「systemctl restart nginx って何をしてるの?」「サービスの起動・停止ってどうやるの?」
Linuxサーバーを触っていると、systemctlというコマンドをよく使います。これはsystemdというLinuxのサービス管理システムを操作するためのコマンドです。
この記事では、systemdの基本と、サービスの管理方法を初心者向けに解説します。
systemdとは?
Linuxの「管理人」
systemd(システムディー)は、Linuxのシステムとサービスを管理するための仕組みです。現在のほとんどのLinuxディストリビューション(Ubuntu、CentOS、RHELなど)で採用されています。
systemdの役割
- サービスの管理:起動、停止、再起動
- 自動起動の設定:OS起動時にサービスを自動で立ち上げる
- 依存関係の管理:サービスの起動順序を制御
- ログの管理:サービスのログを一元管理
サービス(デーモン)とは?
サービス(デーモン)は、バックグラウンドで動き続けるプログラムのことです。
例えば:
- nginx / apache:Webサーバー
- mysql / postgresql:データベース
- sshd:SSH接続を受け付ける
- cron:定期実行
これらはサーバーが起動している間、ずっと動いてリクエストを待ち受けています。
systemctlコマンドの基本
systemdを操作するには、systemctlコマンドを使います。
サービスの起動・停止・再起動
# サービスを起動
sudo systemctl start nginx
# サービスを停止
sudo systemctl stop nginx
# サービスを再起動
sudo systemctl restart nginx
# 設定を再読み込み(サービスを止めずに)
sudo systemctl reload nginx
サービスの状態確認
# サービスの状態を確認
sudo systemctl status nginx
出力例:
● nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Mon 2025-01-01 10:00:00 JST
...
Active: active (running)と表示されていれば、サービスは正常に動いています。
自動起動の設定
# OS起動時に自動起動を有効にする
sudo systemctl enable nginx
# 自動起動を無効にする
sudo systemctl disable nginx
# 自動起動が有効か確認
sudo systemctl is-enabled nginx
コマンドまとめ
| コマンド | 説明 |
|---|---|
| start | サービスを起動 |
| stop | サービスを停止 |
| restart | サービスを再起動 |
| reload | 設定を再読み込み |
| status | 状態を確認 |
| enable | 自動起動を有効に |
| disable | 自動起動を無効に |
サービス一覧の確認
システムで動いているサービスを確認する方法です。
全てのサービスを一覧表示
systemctl list-units --type=service
有効な(自動起動する)サービスを一覧表示
systemctl list-unit-files --type=service --state=enabled
失敗しているサービスを確認
systemctl --failed
ログの確認(journalctl)
systemdでは、journalctlコマンドでサービスのログを確認できます。
基本的な使い方
# システム全体のログを表示
journalctl
# 特定のサービスのログを表示
journalctl -u nginx
# 最新のログをリアルタイムで表示
journalctl -f
# 特定のサービスのログをリアルタイムで表示
journalctl -u nginx -f
# 今日のログだけ表示
journalctl --since today
Unitファイル
systemdでは、サービスの設定をUnitファイルという形式で管理します。
Unitファイルの場所
# システムのUnitファイル
/lib/systemd/system/
# カスタムUnitファイル(こちらを編集)
/etc/systemd/system/
Unitファイルの例
簡単なサービスのUnitファイルを見てみましょう。
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
| セクション | 説明 |
|---|---|
| [Unit] | サービスの説明、依存関係 |
| [Service] | サービスの実行方法 |
| [Install] | 自動起動の設定 |
Unitファイルを変更したら
Unitファイルを編集した後は、設定を再読み込みする必要があります。
sudo systemctl daemon-reload
よくあるトラブルと対処法
サービスが起動しない
# 状態を確認
sudo systemctl status nginx
# ログを確認
journalctl -u nginx
ログにエラーメッセージが出ていないか確認しましょう。
設定ファイルのエラー
多くのサービスには、設定ファイルのテストコマンドがあります。
# nginxの設定テスト
sudo nginx -t
# Apacheの設定テスト
sudo apachectl configtest
まとめ
この記事のポイントを整理します。
| 項目 | 内容 |
|---|---|
| systemdとは | Linuxのシステム・サービス管理の仕組み |
| systemctlとは | systemdを操作するコマンド |
| 基本操作 | start、stop、restart、status、enable |
| ログ確認 | journalctl -u サービス名 |
| 設定変更後 | daemon-reload を忘れずに |
systemdは、Linuxサーバー管理の基本中の基本です。サービスの起動・停止・状態確認は毎日のように使うので、しっかり覚えておきましょう!