Ketika saya memulai ulang layanan nginx pada baris perintah di server Ubuntu, layanan macet ketika file konfigurasi nginx mengalami kesalahan. Pada server multi-situs, ini meletakkan semua situs, bahkan yang tanpa kesalahan konfigurasi.
Untuk mencegahnya, saya jalankan tes konfigurasi nginx terlebih dahulu:
nginx -t
Setelah pengujian berhasil, saya dapat memulai ulang layanan:
/etc/init.d/nginx restart
Atau hanya muat ulang konfigurasi situs nignx tanpa restart:
nginx -s reload
Apakah ada cara untuk menggabungkan kedua perintah tersebut di mana perintah restart tergantung pada hasil pengujian konfigurasi?
Saya tidak dapat menemukan ini secara online dan dokumentasi resmi tentang ini agak mendasar. Saya tidak tahu cara menggunakan Linux dengan baik, jadi saya tidak tahu apakah yang saya cari ada tepat di depan saya atau tidak mungkin sama sekali.
Saya menggunakan nginx v1.1.19.
Jawaban:
Sebenarnya, sejauh yang saya tahu, nginx akan menampilkan pesan kosong dan tidak akan benar-benar restart jika konfigurasinya buruk.
Satu-satunya cara untuk mengacaukannya adalah dengan melakukan nginx stop lalu mulai lagi. Itu akan berhasil untuk berhenti, tetapi gagal untuk memulai.
sumber
service nginx reload
tidak menunjukkan apakah konfigurasi dimuat dengan benar atau tidak, jadi tidak berguna jika Anda mencurigai konfigurasi tersebut mungkin salah.service nginx restart
akan menghentikan server jika konfigurasi mengalami kesalahan!Pada nginx 1.8.0, solusi yang benar adalah
Perhatikan bahwa karena bug,
configtest
selalu mengembalikan kode keluar nol meskipun file konfigurasi mengalami kesalahan.sumber
nginx -t
tanpa sudo hampir pasti akan gagal karena kesalahan izin.Saya menggunakan perintah berikut untuk memuat ulang Nginx (versi 1.5.9) hanya jika uji konfigurasi berhasil:
Jika Anda perlu sering melakukan ini, Anda mungkin ingin menggunakan alias. Saya menggunakan yang berikut ini:
Trik di sini dilakukan oleh "&&" yang hanya mengeksekusi perintah kedua jika perintah pertama berhasil. Anda dapat melihat di sini penjelasan yang lebih detail tentang penggunaan operator "&&".
Anda dapat menggunakan "restart" daripada "reload" jika Anda benar-benar ingin me-restart server.
sumber
pkill -1 nginx
(secara efektif apa yang dilakukan ulang init.d / nginx saya) TIDAK memuat ulang jika konfigurasi gagal dan secara menyesatkan kembali berhasil. Periksa versi Anda sendiri.nginx -t
sebagai gantinya.lalu gunakan perintah "nginx.reload" dll ..
sumber
Anda dapat memuat ulang menggunakan
/etc/init.d/nginx reload
dansudo service nginx reload
Jika
nginx -t
melontarkan beberapa kesalahan maka itu tidak akan dimuat ulangjadi gunakan && untuk menjalankan keduanya secara bersamaan
Suka
sumber
run both at a same time
Menjalankan perintah di sebelah kanan JIKA perintah di sebelah kiri mengembalikan kode keluar 0. Jika Andanginx -t
melakukan kesalahan, kode keluarnya tidak akan 0, jadi perintah kedua tidak akan berjalan. Itsnginx -s reload
pulaIf nginx -t throws some error then it won't reload
. Pernyataanrun both at a same time
itu juga bisa diartikan sebagai satu perintah, atau satu baris. Saya tidak menafsirkan dia harus mengatakan dalam kasus iniin parallel
.Anda dapat menggunakan sinyal untuk mengontrol nginx.
Menurut dokumentasi, Anda perlu mengirim sinyal HUP ke proses master nginx.
Periksa dokumentasinya di sini: http://nginx.org/en/docs/control.html
Anda dapat mengirim sinyal HUP ke proses master nginx PID seperti ini:
Perintah di atas membaca PID nginx dari
/var/run/nginx.pid
. Secara default nginx pid ditulis ke/usr/local/nginx/logs/nginx.pid
tetapi itu dapat diganti di config. Periksa Andanginx.config
untuk melihat di mana ia menyimpan PID.sumber
Setidaknya di Debian, skrip startup nginx memiliki fungsi muat ulang yang berfungsi:
Sepertinya yang perlu Anda lakukan hanyalah menelepon,
service nginx reload
bukanrestart
sejak panggilan itutest_nginx_config
.sumber
service nginx reload
tidak akan memberikan indikasi apa pun, apakah konfigurasi yang diuji OK atau tidak, atau apakah itu dimuat ulang atau tidak.test_nginx_config
dilakukan dalam kasus itu?service nginx reload
cukup pada baris perintah, namun terkadang Anda mungkin ingin menangkap keluaran stderr dan mengembalikannya ke skrip untuk pemecahan masalah.nginx -t
akan memberi tahu Anda file mana yang memiliki parameter tidak valid dan di baris mana.