自動起動

起動していることと、次も起動することは別

systemctl start nginx で動き出したサービスは、サーバーを再起動すると消えます。start は「いま動かす」という指示でしかないからです。次にサーバーが立ち上がったときにも自動で動いてほしいなら、別の指示が要ります。

systemctl enable nginx systemctl disable nginx

この2つは、いま動いているかどうかには一切触りません。enable を打っても、止まっているサービスが動き出すことはありません。逆に disable を打っても、動いているサービスは止まりません。

混同すると事故になります。よくあるのは、設定を直したあと start だけして安心し、次の再起動でサイトが落ちる形です。動かしたら enable も、と対で覚えてください。

いまどちらなのかを確かめる

systemctl is-enabled nginx # enabled

答えは enableddisabled です。前の回の 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.service

multi-user.target は、通常の状態まで立ち上がったことを表す目標地点です。その wants ディレクトリに入っているサービスが、そこへ到達する過程で起動されます。enable はここにリンクを作り、disable はそのリンクを消します。

仕組みが分かると、状態を目で確かめる手段が増えます。is-enabled の答えが疑わしいとき、このディレクトリを見れば実体が分かります。

起動の順番も指定できる

サービスには依存関係があります。たとえばデータベースが立ち上がる前にアプリが動き出すと、接続できずに失敗します。systemd は unit ファイルの中で「何のあとに動かすか」を書けるようになっていて、enable するとその順番も込みで管理されます。書き方は次の回で自分の手で書きます。

手を動かす

nginx の自動起動をいったん外し、その状態を記録してから、あらためて有効にします。最後にリンクが張られていることを自分の目で確かめます。

ヒント

  • 1. systemctl disable nginx を打つ
  • 2. systemctl is-enabled nginx の答えを /root/enable-log.txt に書き出す
  • 3. systemctl enable nginx で戻し、同じファイルに追記する
  • 4. ls -l /etc/systemd/system/multi-user.target.wants/ でリンクを確かめる

5 項目で採点します