本文へスキップ
BecomeCoder

サーバーコース · 第2章 サービスとプロセス · レッスン10

systemd と systemctl ― サービスを起動・停止・自動起動する

ブラウザで完結

導入

nginxpostgres のような「サーバーで常時動き続けるプログラム」を サービス(デーモン) と呼びます。これらをまとめて管理する司令塔が 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 nginxactive (running)Main PID を確認しましょう。systemctl list-units で全サービスを眺め、停止中の dockersudo systemctl start docker で起動 → systemctl is-active dockeractive になったことを確かめてください。sudo を付けずに systemctl start docker を打つと断られることも体験しましょう。

演習

nginx サービスの現在の状態を表示してください(管理者権限は不要な操作です)。

ヒント1を見る

状態を見るのは systemctl status ユニット名 です。

ヒント2を見る

systemctl status nginx

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。