LoginSignup
0
2

More than 3 years have passed since last update.

システム起動後のnginxがsystemdでenabledにも関わらず起動しない場合の対処

Posted at

Ansibleで構成したUbuntu 18.04で、nginxをsystemdでenabledにしているにも関わらず、サーバーを再起動するとnginxが起動しないトラブルが起きました。

プロキシ設定がDNSを参照する場合は注意

結論から言うと、DNS参照を必要とするドメイン名によるプロキシ設定を行っていたことと、サービス定義の起動条件(systemdのAfter)の問題でした。

Ansibleでは次のタスクでサービスの有効化をしていたのですが、

      - name: enable nginx service
        systemd: name=nginx.service enabled=yes

/etc/systemd/system/multi-user.target.wants/nginx.serviceAfterの記述が次のように。

After=network.target

journalctl -u nginxでログを見るとこんな感じのログがでてました。

nginx: [emerg] host not found in upstream "hogehoge.net" in /etc/nginx/sites-enabled/reverse-proxy:17

upstreamのドメインが見つからないと言われました。でもシェルからサービスを起動すると問題ないのです。

DNSが使えるまで待つにはnss-lookup.targetも必要

起動プロセスの中でDNSの参照もできるまで待つには、nss-lookup.targetも加える必要がありました。nginx自体のサンプルとしては次のように紹介されています。

After=syslog.target network.target remote-fs.target nss-lookup.target

ansibleのタスクを直す

AnsibleのsystemdモジュールにAfterを指定する属性があるかなーと思いましたが残念ながらありませんでした。

なので次のように強引に置換しました。もっとよい対処法があったら教えてください!

      - name: enable nginx service
        systemd: name=nginx.service enabled=yes

      - name: fix nginx systemd definition
        replace:
          dest: /etc/systemd/system/multi-user.target.wants/nginx.service
          regexp: "After=.+$"
          replace: "After=syslog.target network.target remote-fs.target nss-lookup.target"
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2