自動起動
起動していることと、次も起動することは別
systemctl start nginx で動き出したサービスは、サーバーを再起動すると消えます。start は「いま動かす」という指示でしかないからです。次にサーバーが立ち上がったときにも自動で動いてほしいなら、別の指示が要ります。
systemctl enable nginx
systemctl disable nginxこの2つは、いま動いているかどうかには一切触りません。enable を打っても、止まっているサービスが動き出すことはありません。逆に disable を打っても、動いているサービスは止まりません。
混同すると事故になります。よくあるのは、設定を直したあと start だけして安心し、次の再起動でサイトが落ちる形です。動かしたら enable も、と対で覚えてください。
いまどちらなのかを確かめる
systemctl is-enabled nginx
# enabled答えは enabled か disabled です。前の回の is-active と名前が似ていますが、見ているものが違います。is-active は現在、is-enabled は次回。この2つを並べて確かめる癖をつけておくと、状態を取り違えません。
systemctl is-active nginx # active
systemctl is-enabled nginx # enabled上が「いま動いている」、下が「再起動しても動く」です。両方が揃って、はじめて公開できている状態と言えます。
enable が実際にしていること
仕組みは意外なほど単純で、リンクを1本張っているだけです。
ls -l /etc/systemd/system/multi-user.target.wants/
# nginx.service -> /lib/systemd/system/nginx.servicemulti-user.target は、通常の状態まで立ち上がったことを表す目標地点です。その wants ディレクトリに入っているサービスが、そこへ到達する過程で起動されます。enable はここにリンクを作り、disable はそのリンクを消します。
仕組みが分かると、状態を目で確かめる手段が増えます。is-enabled の答えが疑わしいとき、このディレクトリを見れば実体が分かります。
起動の順番も指定できる
サービスには依存関係があります。たとえばデータベースが立ち上がる前にアプリが動き出すと、接続できずに失敗します。systemd は unit ファイルの中で「何のあとに動かすか」を書けるようになっていて、enable するとその順番も込みで管理されます。書き方は次の回で自分の手で書きます。
手を動かす
nginx の自動起動をいったん外し、その状態を記録してから、あらためて有効にします。最後にリンクが張られていることを自分の目で確かめます。