web-dev-qa-db-ja.com

systemdでブート時にnginxを起動します

Nginx 1.9をDebian 8サーバーにインストールしました。 nginxを実行するように指示すると、nginxは正常に動作していますが、起動時にnginxを自動的にロードするようには見えません。

私はインターネット上で推奨されている数多くのinitスクリプトを試しましたが、まだ何も機能していません。だから今私はsystemctlでそれを理解しようとしています。

~$ systemctl status nginx
● nginx.service
   Loaded: masked (/dev/null)
   Active: inactive (dead)
~$ Sudo systemctl try-restart nginx
Failed to try-restart nginx.service: Unit nginx.service is masked.
~$ Sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.
~$ Sudo systemctl reload nginx
Failed to reload nginx.service: Unit nginx.service is masked.

残念ながら、「サービスがマスクされている」の意味がわかりません。また、なぜマスクされているのかわかりません。

私が走るとき

Sudo nginx

サーバーは問題なく実行されます。そこで、nginxサービスのマスクを解除する方法を調べました。

~$ Sudo systemctl unmask nginx.service
Removed symlink /etc/systemd/system/nginx.service.

それでは、systemctlを使用してnginxを起動します。そこで、再起動するとnginxが自動的に読み込まれるかどうかを確認しました。しかし、それは失敗し、私はここからどこへ行くべきか分かりません。

誰かがブート時にnginxを自動的に実行するのを手伝ってくれる?

18
j0h

ここで私のために働いたもの: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubunt

他のバージョンのnginxのコンパイルに固有のドキュメントのほとんどを無視して、「Make it Autostart」に進みました。

私はそこの指示に従いました、そして今リブートすると、nginx 1.9が実行されています。

私は間違いなく皆の助けと洞察に感謝します。皆さん、ありがとうございました!

2
j0h

有効化、開始、およびマスク操作を混同しているようです。

  • systemctl startsystemctl stop:問題のユニットを開始(停止)します即時;
  • systemctl enablesystemctl disable:起動時にautostartのユニットをマーク(マーク解除)します(ユニット固有の方法で、[Install] セクション);
  • systemctl masksystemctl unmask:問題のユニットを手動で、またはデフォルトのブートターゲットの依存関係を含む他のユニットの依存関係として起動しようとする試みをすべて禁止(許可)します。 systemdでの自動起動のマーキングは、デフォルトのブートターゲットから問題のユニットに人為的な依存関係を追加することによって実装されるため、「マスク」も自動起動を許可しないことに注意してください。

したがって、これらはすべて別個の操作です。これらのうち、あなたが欲しいのはsystemctl enable

参照: systemctl(1)

詳細:Lennart Poettering(2011-03-02)。 "オフの3つのレベル"systemd for Administrators。 0pointer.de。

21
intelfx

承認された回答のリンクを修正して、正しいページにリダイレクトされるようにしました。しかし、ここに関連するビットがあります:

Sudo systemctl enable nginx.service
Sudo systemctl start nginx.service
Sudo systemctl status nginx.service

どこ /lib/systemd/system/nginx.serviceは次のようになります。

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

`
2
luxagraf

nginxリソースから https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

echo "
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service
1