導入
nginx や postgres のような「サーバーで常時動き続けるプログラム」を サービス(デーモン) と呼びます。これらをまとめて管理する司令塔が systemd、それを操作するコマンドが systemctl です。「Web サーバーを再起動する」「起動時に自動で立ち上げる」——サーバー運用の中心的な操作です。
説明
systemd は、サーバーの起動時に必要なサービスを立ち上げ、動き続けるよう見張る「管理者」です。各サービスは ユニット(nginx.service のような単位)として登録されています。
flowchart TD
sd["systemd(PID 1・司令塔)"]
sd --> u1["ssh.service(起動中)"]
sd --> u2["nginx.service(起動中)"]
sd --> u3["postgresql.service(起動中)"]
sd --> u4["docker.service(停止中)"]
まず、あるサービスの状態を見るのが systemctl status です。これは一般ユーザーでも実行できます。
systemctl status nginx
先頭の ●(緑の丸)と Active: active (running) が「今ちゃんと動いている」印です。Main PID: 640 は、前のレッスンで ps に出ていた nginx のプロセス番号——サービスとプロセスがつながっているのが分かります。登録済みサービスの一覧は systemctl list-units で見られます。
サービスを操作する(起動・停止・再起動・自動起動の設定)には、システムを変えるので 管理者権限が必要 です。第5章で学んだ sudo の出番です。
sudo systemctl restart nginx
sudo systemctl stop docker
sudo systemctl start docker
sudo を付けずに実行すると、Access denied(権限がない)と断られます——第5章の「必要なときだけ権限を借りる」が、ここで生きてきます。よく使う操作は次の通りです。
| コマンド | 意味 |
|---|---|
systemctl status ユニット | 状態を見る(一般ユーザーOK) |
sudo systemctl start ユニット | 起動する |
sudo systemctl stop ユニット | 停止する |
sudo systemctl restart ユニット | 再起動する(設定変更を反映) |
sudo systemctl enable ユニット | 自動起動を有効にする(再起動後も立ち上がる) |
sudo systemctl disable ユニット | 自動起動を無効にする |
enable(自動起動)と start(今すぐ起動)は別物です。start は今動かすだけ、enable は「次にサーバーが再起動しても自動で立ち上がる」よう予約する設定——この違いが運用では重要です。
sudo systemctl enable docker
systemctl is-enabled docker
設定ファイル(
/etc/nginx/...)を編集しただけでは、変更は反映されません。sudo systemctl restart nginxで再起動して初めて有効になります。「設定を直す→ restart で反映→ status で確認」がサービス運用の定石です。
やってみよう
systemctl status nginx で active (running) と Main PID を確認しましょう。systemctl list-units で全サービスを眺め、停止中の docker を sudo systemctl start docker で起動 → systemctl is-active docker で active になったことを確かめてください。sudo を付けずに systemctl start docker を打つと断られることも体験しましょう。
演習
nginx サービスの現在の状態を表示してください(管理者権限は不要な操作です)。
ヒント1を見る
状態を見るのは systemctl status ユニット名 です。
ヒント2を見る
systemctl status nginx