Quelles meilleures méthodes puis-je utiliser pour faire attendre Apache quelques secondes et
vérifie-t-il que ses adresses sont opérationnelles avant de commencer?
Eh bien, la méthode que je décris ne résout évidemment pas le problème sous-jacent. Mais je crois qu’en utilisant un outil de surveillance autonome capable de gérer la tâche consistant à «remettre Apache au service» sans avoir à pirater init.d
Le script est une solution plus stable. La clé est d'utiliser monit
qui se décrit comme:
Monit est un petit utilitaire Open Source permettant de gérer et de surveiller Unix.
systèmes. Monit effectue la maintenance et la réparation automatiques et peut
exécuter des actions causales significatives dans des situations d'erreur.
Pour l'installer dans Ubuntu, faites ceci: j'utilise aptitude
et c'est sur Ubuntu 12.04 FWIW:
sudo aptitude install monit
Une fois installé, j'aime bien configurer le serveur de messagerie par défaut pour l'envoi d'alertes. Cela suppose que vous avez postfix
ou sendmail
actif sur votre serveur. Ouvrez le monit
fichier de contrôle avec votre éditeur de texte préféré; J'aime utiliser nano
:
sudo nano /etc/monit/monitrc
Cherchez le set mailserver
lignes et définir cette ligne et enregistrer le monit
fichier de contrôle:
set mailserver localhost
Maintenant, vérifiez et assurez-vous qu'il y a un monit
conf.d
configuration du répertoire; c'est là individuel monit
les tâches sont configurées:
ls -la /etc/monit/conf.d
Si en quelque sorte ça /etc/monit/conf.d
n'a pas été configuré, créez-le comme ceci:
sudo mkdir /etc/monit/conf.d
Maintenant que cela est fait, créons un monit
Règles Apache. Tout d'abord, trouver où l'Apache .pid
Le fichier est défini et vérifiez qu'il est défini. C’est généralement là où il est défini sur Ubuntu 12.04 à l’aide de l’installation par défaut du paquet Apache:
ls -la /var/run/apache2.pid
Si ce .pid
chemin du fichier est correct, créons le monit
Règles Apache avec nano
comme ça:
sudo nano /etc/monit/conf.d/apache2.conf
Et placez ce code dans ce fichier et enregistrez-le:
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 }
La logique du script est assez simple: le monit
Apache ruleset vérifiera la /var/run/apache2.pid
fichier et il sait utiliser spécifique init.d
directives pour start
et stop
logique. La magie vient du if
/ then
bloquer qui surveille essentiellement le port Apache 80
sur localhost 127.0.0.1
et prendra des mesures pour récupérer Apache s’il ya un délai d’attente de 15 secondes ou plus. Et le alert
Cette ligne enverra des alertes par e-mail à une adresse e-mail spécifiée si les conditions du timeout
ou nonexist
sont remplies; C’est une option, alors n'hésitez pas à la commenter si vous n’avez pas besoin d’être inondé par des alertes par e-mail.
Maintenant redémarrer monit
:
sudo service monit restart
Et vous pouvez suivre le monit
connectez-vous ici pour le voir faire le travail et le déboguer si quelque chose ne fonctionne pas comme prévu:
sudo tail -f -n 200 /var/log/monit.log
Alors, quand la poussière s’installera sur ce serveur, vous aurez monit
configuration pour vous assurer qu'Apache est en cours d'exécution. Très utile comme outil général «Gardez le serveur Web Apache actif», mais dans votre cas monit
peut s’assurer que Apache est lancé au redémarrage / au démarrage afin que vous n’ayez pas à vous perdre avec le noyau Apache init.d
script qui est vraiment un peu en désordre et est facilement oublié à l'avenir lors d'une mise à niveau.
Notez également que je lie Apache explicitement à IPv6, mais ce script de surveillance suppose que s’il ne parvient pas à 127.0.0.1
alors il faut agir. Peut-être devez-vous changer l'adresse IPv4 localhost de 127.0.0.1
en équivalent IPv6 d'adresse de ::1
. Expérimentez et voyez ce qui fonctionne.