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.d
skrip adalah solusi yang lebih stabil. Kuncinya adalah menggunakan monit
yang 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 aptitude
dan 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 postfix
atau sendmail
aktif di server Anda. Buka monit
file kontrol dengan editor teks favorit Anda; Saya suka menggunakan nano
:
sudo nano /etc/monit/monitrc
Cari set mailserver
baris dan atur baris ini dan simpan monit
file kontrol:
set mailserver localhost
Sekarang periksa dan pastikan ada monit
conf.d
pengaturan direktori; disinilah monit
tugas individu diatur:
ls -la /etc/monit/conf.d
Jika entah bagaimana /etc/monit/conf.d
itu tidak diatur, buat seperti ini:
sudo mkdir /etc/monit/conf.d
Sekarang setelah itu selesai, mari kita buat monit
aturan Apache. Pertama, cari tahu di mana .pid
file 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 .pid
filepath itu benar, mari kita buat aturan monit
Apache yang sebenarnya dengan nano
seperti 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: monit
Apache ruleset akan memeriksa /var/run/apache2.pid
file dan ia tahu untuk menggunakan init.d
arahan khusus start
dan stop
logika. Sihir berasal dari if
/ then
blok yang pada dasarnya memonitor port Apache 80
di localhost 127.0.0.1
dan akan mengambil tindakan untuk memulihkan Apache jika ada batas waktu 15 detik atau lebih. Dan alert
saluran akan mengirimkan peringatan email ke alamat email yang ditentukan jika kondisi timeout
atau nonexist
terpenuhi; 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 monit
log 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 monit
pengaturan untuk memastikan Apache berjalan. Sangat berguna sebagai alat umum "jaga agar server web Apache tetap hidup", tetapi dalam kasus Anda monit
dapat mengambil alih tugas untuk memastikan Apache muncul saat reboot / startup sehingga Anda tidak perlu repot-repot dengan init.d
skrip 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.1
maka ia harus mengambil tindakan. Mungkin Anda perlu mengubah alamat localhost IPv4 dari 127.0.0.1
ke alamat setara IPv6 ::1
. Eksperimen dan lihat apa yang berhasil.