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


18

Debian 8サーバーにnginx 1.9をインストールしました。実行するように指示すると、nginxは正常に動作しますが、ブート時にnginxが自動的にロードされないようです。

インターネットで推奨されている多数の初期化スクリプトを試しましたが、まだ何も機能していません。だから今、私は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を自動的に実行するのを手伝ってくれますか?


6
systemctl enable nginx...
jasonwryan

回答:


21

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

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

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

参考文献:systemctl(1)

その他:Lennart Poettering(2011-03-02)。 「オフの3つのレベル」管理者用のsystemd。0pointer.de。


起動時にnginxをロードしたいだけです。systemctlは、なぜ起きていないのかを理解するのに役立つと思った。
j0h

@ j0h:私の答えをもう一度読み直してください。なぜ自動起動しないのか、自動起動するために何をすべきかを説明しました。ヒント:最後の文。
intelfx

リンクは404ページにリダイレクトし、systemctlを使用してnginxを有効にしました。再起動しても、まだ実行されていませんでした。おそらくsystemctl enable nginx.serviceを試す必要があります
j0h

1
@ j0h:私は文ではなく、参照を意味しています。(ちなみに、壊れたリンクは申し訳ありません—修正済みです。)そして、はい、もう一度読み直してください。ブート時に何かを開始する必要がありますsystemctl enable(ではありませんsystemctl start)。
intelfx

2

正しい回答にリダイレクトされるように、受け入れられた回答のリンクを修正しました。しかし、ここに関連するビットがあります:

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

`

古いUnixソケットを残して、次のスタート(失敗からnginxのを防ぐために、QUITの代わりに使用TERM trac.nginx.org/nginx/ticket/753
danger89

2

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

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

そこの指示に従いましたが、再起動するとnginx 1.9が実行されます。

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


4
回答としてリンクを単にドロップしないでください:回答が外部リソースに依存しないように関連情報を追加してください
...-jasonwryan

4
実際、外部リソースはなくなりました... web.archiveでご覧ください:web.archive.org/web/20150328063215/https
書き換えられ

1

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.