導入
せっかく 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: の行にある enabled/disabled の表記が自動起動の設定です。この2つは別の情報なので、両方を見る癖をつけましょう。それぞれを単体で確認したいときは is-active と is-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 install→systemctl enable→systemctl start——この3ステップが、ソフトを1つ「サーバーの常駐サービス」として本番投入するまでの定番の流れです。enableを忘れると、次のメンテナンスでサーバーを再起動した瞬間にサービスが止まっている、という事故につながります。
やってみよう
systemctl status nginx で現在の稼働状況と enabled/disabled の表記を確認しましょう。sudo systemctl enable nginx を打ってから systemctl is-enabled nginx で enabled になっていることを確かめてください。対比として systemctl is-enabled docker(まだ disabled)も見てみましょう。
演習
nginx サービスを自動起動するように設定してください。
ヒント1を見る
自動起動の設定は systemctl enable ユニット名。システムの設定を変えるので管理者権限が必要です。
ヒント2を見る
sudo systemctl enable nginx