本文へスキップ
BecomeCoder

サーバーコース · 第4章 動かして運用する · レッスン17

サービスの自動起動 ― 再起動しても立ち上がるように

ブラウザで完結

導入

せっかく sudo systemctl start nginx でサービスを起動しても、サーバーを再起動した瞬間に nginx が止まったまま——という事故は、運用のあるあるです。理由は単純で、start は「今この瞬間動かす」だけの命令で、「次回の起動でも自動で立ち上げる」設定にはなっていないからです。

説明

前章の apt install でソフトを入れたら、次にやるべきは「常駐化」です。systemctl には、この2つの別々の操作が用意されています。

コマンド意味いつ効くか
sudo systemctl start ユニット今すぐ起動するその場限り
sudo systemctl enable ユニット次回のOS起動時にも自動で立ち上げる設定にする再起動後も継続
flowchart LR
    A["sudo apt install nginx<br/>(ソフトを入れる)"] --> B["sudo systemctl enable nginx<br/>(自動起動を予約)"]
    B --> C["sudo systemctl start nginx<br/>(今すぐ起動)"]
    C --> D["サーバー再起動しても<br/>enable 済みなら自動で立ち上がる"]

まずは現在の状態を status で確認します。前章で見た通り、これは一般ユーザーでも実行できます。

systemctl status nginx

Active: active (running) かどうかは今の稼働状況、Loaded: の行にある enableddisabled の表記が自動起動の設定です。この2つは別の情報なので、両方を見る癖をつけましょう。それぞれを単体で確認したいときは is-activeis-enabled が便利です。

systemctl is-active nginx
systemctl is-enabled nginx

自動起動を有効にするには enable を使います(システムの設定を変えるので sudo が必要です)。

sudo systemctl enable nginx

enable を実行しても、それだけでは今すぐには起動しません(次回起動時の予約をするだけ)。「予約」と「今すぐ起動」を1回でまとめて行いたいときは --now を付けます。

sudo systemctl enable --now nginx

自動起動が設定されていないサービスの例も見てみましょう。前章までに一度も操作していない docker は、まだ disabled(自動起動オフ)のままです。

systemctl is-enabled docker
disabled

sudo systemctl enable docker を打てば、これも enabled に変わります。nginx はすでに有効になっていましたが、docker は自分で enable するまで無効のまま——これが「インストールしただけでは自動起動しない」という感覚です。

apt installsystemctl enablesystemctl start——この3ステップが、ソフトを1つ「サーバーの常駐サービス」として本番投入するまでの定番の流れです。enable を忘れると、次のメンテナンスでサーバーを再起動した瞬間にサービスが止まっている、という事故につながります。

やってみよう

systemctl status nginx で現在の稼働状況と enableddisabled の表記を確認しましょう。sudo systemctl enable nginx を打ってから systemctl is-enabled nginxenabled になっていることを確かめてください。対比として systemctl is-enabled docker(まだ disabled)も見てみましょう。

演習

nginx サービスを自動起動するように設定してください。

ヒント1を見る

自動起動の設定は systemctl enable ユニット名。システムの設定を変えるので管理者権限が必要です。

ヒント2を見る

sudo systemctl enable nginx

実際に動かしてみよう

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

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

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