Metode apa yang lebih baik yang bisa saya gunakan untuk membuat Apache menunggu beberapa detik dan memeriksa alamatnya sudah berjalan sebelum mulai?
Nah, metode yang saya uraikan jelas tidak menyelesaikan masalah mendasar. Tapi saya percaya menggunakan alat pemantauan mandiri yang dapat menangani tugas "menendang Apache ke layanan" tanpa harus meretas init.dskrip adalah solusi yang lebih stabil. Kuncinya adalah menggunakan monityang digambarkan sendiri sebagai:
Monit adalah utilitas Open Source kecil untuk mengelola dan memantau sistem Unix. Monit melakukan pemeliharaan dan perbaikan otomatis dan dapat melakukan tindakan kausal yang bermakna dalam situasi kesalahan.
Untuk menginstalnya di Ubuntu, lakukan saja ini; Saya menggunakan aptitudedan ini di Ubuntu 12,04 FWIW:
sudo aptitude install monit
Setelah terinstal, saya ingin mengatur server email default untuk mengirim peringatan. Ini mengasumsikan Anda memiliki postfixatau sendmailaktif di server Anda. Buka monitfile kontrol dengan editor teks favorit Anda; Saya suka menggunakan nano:
sudo nano /etc/monit/monitrc
Cari set mailserverbaris dan atur baris ini dan simpan monitfile kontrol:
set mailserver localhost
Sekarang periksa dan pastikan ada monit conf.dpengaturan direktori; disinilah monittugas individu diatur:
ls -la /etc/monit/conf.d
Jika entah bagaimana /etc/monit/conf.ditu tidak diatur, buat seperti ini:
sudo mkdir /etc/monit/conf.d
Sekarang setelah itu selesai, mari kita buat monitaturan Apache. Pertama, cari tahu di mana .pidfile Apache diatur dan periksa apakah sudah diatur. Ini biasanya di mana ia diatur pada Ubuntu 12.04 menggunakan instalasi paket Apache default:
ls -la /var/run/apache2.pid
Jika .pidfilepath itu benar, mari kita buat aturan monitApache yang sebenarnya dengan nanoseperti ini:
sudo nano /etc/monit/conf.d/apache2.conf
Dan tempatkan kode ini di file itu dan simpan:
check process apache with pidfile /var/run/apache2.pid
start "/etc/init.d/apache2 start"
stop "/etc/init.d/apache2 stop"
if failed host 127.0.0.1 port 80
with timeout 15 seconds
then restart
alert YourEmail@example.com only on { timeout, nonexist }
Logika ke skrip cukup sederhana: monitApache ruleset akan memeriksa /var/run/apache2.pidfile dan ia tahu untuk menggunakan init.darahan khusus startdan stoplogika. Sihir berasal dari if/ thenblok yang pada dasarnya memonitor port Apache 80di localhost 127.0.0.1dan akan mengambil tindakan untuk memulihkan Apache jika ada batas waktu 15 detik atau lebih. Dan alertsaluran akan mengirimkan peringatan email ke alamat email yang ditentukan jika kondisi timeoutatau nonexistterpenuhi; itu opsional jadi jangan ragu untuk berkomentar jika Anda tidak perlu dibanjiri oleh peringatan email.
Sekarang restart monit:
sudo service monit restart
Dan Anda dapat mengikuti monitlog di sini untuk melihatnya melakukan hal itu dan men-debugnya jika sesuatu tidak berfungsi seperti yang diharapkan:
sudo tail -f -n 200 /var/log/monit.log
Jadi ketika debu mengendap di server itu, Anda akan memiliki monitpengaturan untuk memastikan Apache berjalan. Sangat berguna sebagai alat umum "jaga agar server web Apache tetap hidup", tetapi dalam kasus Anda monitdapat mengambil alih tugas untuk memastikan Apache muncul saat reboot / startup sehingga Anda tidak perlu repot-repot dengan init.dskrip Apache inti yang benar-benar agak berantakan dan mudah dilupakan di masa depan saat upgrade.
Juga perhatikan, saya dapat melihat bahwa Anda mengikat Apache secara eksplisit ke IPv6, tetapi skrip pemantauan ini mengasumsikan bahwa jika tidak dapat mencapai 127.0.0.1maka ia harus mengambil tindakan. Mungkin Anda perlu mengubah alamat localhost IPv4 dari 127.0.0.1ke alamat setara IPv6 ::1. Eksperimen dan lihat apa yang berhasil.