mulai nginx saat boot dengan systemd

18

Saya baru saja menginstal nginx 1.9 pada server Debian 8. nginx bekerja dengan baik, ketika saya memintanya untuk menjalankan, tetapi sepertinya tidak memuat nginx secara otomatis saat boot.

Saya telah mencoba banyak skrip init yang direkomendasikan di internet, tetapi belum ada yang berhasil. Jadi sekarang saya mencoba mencari tahu dengan 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.

Sayangnya, saya tidak tahu apa artinya "layanan bertopeng", dan saya tidak tahu mengapa layanan itu bertopeng.

ketika saya berlari

sudo nginx

server berjalan dengan baik. Jadi, saya melihat ke dalam membuka kedok layanan nginx.

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

ok keren, sekarang saya bisa mulai nginx menggunakan systemctl. Jadi saya memeriksa untuk melihat apakah me-reboot akan memuat nginx secara otomatis. Tetapi gagal melakukannya, dan saya tidak tahu harus ke mana dari sini.

Dapatkah seseorang membantu saya menjalankan nginx secara otomatis saat boot?

j0h
sumber
6
systemctl enable nginx...
jasonwryan

Jawaban:

21

Anda tampaknya bingung mengaktifkan, memulai, dan menutup operasi.

  • systemctl start, systemctl stop: memulai (menghentikan) unit yang dimaksud segera ;
  • systemctl enable, systemctl disable: menandai (tidak menandai) unit untuk autostart pada saat boot (dengan cara khusus unit, dijelaskan pada [Install]bagiannya);
  • systemctl mask, systemctl unmask: melarang (memungkinkan) semua dan segala upaya untuk memulai unit yang dipermasalahkan (baik secara manual atau sebagai ketergantungan dari unit lain, termasuk dependensi dari target boot default). Perhatikan bahwa menandai untuk autostart di systemd diimplementasikan dengan menambahkan ketergantungan buatan dari target boot default ke unit yang dimaksud, jadi "mask" juga melarang autostarting.

Jadi, ini semua adalah operasi yang berbeda. Dari jumlah ini, yang Anda inginkan systemctl enable.

Ref .: systemctl (1) .

Lebih lanjut: Lennart Poettering (2011-03-02). "Tiga Tingkat Mati" . systemd untuk Administrator . 0pointer.de.

intelfx
sumber
Saya hanya ingin nginx memuat saat boot. Saya pikir systemctl dapat membantu saya mencari tahu mengapa ini tidak terjadi.
j0h
@ j0h: Baca lagi jawaban saya. Saya telah menjelaskan mengapa itu tidak autostart dan apa yang harus dilakukan untuk membuatnya autostart. Petunjuk: kalimat terakhir.
intelfx
Tautan dialihkan ke halaman 404, dan saya menggunakan systemctl untuk mengaktifkan nginx. Ketika saya reboot, itu masih tidak berjalan. mungkin saya harus mencoba systemctl mengaktifkan nginx.service
j0h
1
@ j0h: Saya maksudkan kalimat, bukan referensi. (BTW, maaf karena tautan rusak - diperbaiki sekarang.) Dan ya, baca sekali lagi, Anda perlu systemctl enable(tidak systemctl start) untuk membuat sesuatu mulai saat boot.
intelfx
2

Memperbaiki tautan dalam jawaban yang diterima sehingga mengarahkan ke halaman yang tepat. Tapi ini sedikit yang relevan:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service
sudo systemctl status nginx.service

di mana /lib/systemd/system/nginx.serviceterlihat seperti:

# 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

`
luxagraf
sumber
Gunakan JANGKA bukannya QUIT untuk mencegah Nginx meninggalkan soket Unix basi dan gagal memulai berikutnya ( trac.nginx.org/nginx/ticket/753 )
hazard89
2

Inilah yang berhasil bagi saya: https://web.archive.org/web/20150328063215/https://longhandpixels.net/blog/2014/02/install-nginx-debian-ubuntu

Saya mengabaikan sebagian besar dokumen, yang khusus untuk mengkompilasi versi lain, dari nginx, dan pergi ke "Make it Autostart".

Saya mengikuti petunjuk di sana, dan sekarang ketika saya reboot, nginx 1.9 sedang berjalan.

Saya sangat menghargai bantuan dan wawasan semua orang. Terima kasih semua!

j0h
sumber
4
Tolong jangan hanya membuang tautan sebagai jawaban: tambahkan informasi yang relevan sehingga jawabannya tidak tergantung pada sumber daya eksternal ...
jasonwryan
4
Sebenarnya sekarang sumber daya eksternal hilang ... Lihat di web.archive: web.archive.org/web/20150328063215/https://longhandpixels.net/…
ditulis ulang
1

dari nginx resources 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
Simone Sanfratello
sumber