Exécuter un contrôle ponctuel et des actions conditionnelles depuis l’ordonnanceur de l’hôte.
1. Préparer le contrôle
Terminez l’installation Python. Choisissez des conteneurs de test dont le nom commence par web, ou remplacez le sélecteur. Gardez les motifs entre quotes pour éviter leur expansion par le shell.
cron exige un fichier d’état et au moins une règle --cmd-if ou commande --cmd. Il effectue un passage puis se termine.
2. Tester sans action Docker
monit-docker --name 'web*' cron \
--state-file "$HOME/.local/state/monit-docker/web.json" \
--cooldown 300 --dry-run \
--cmd-if 'mem_percent > 90 ? restart'La règle propose un redémarrage si la mémoire dépasse 90 %. Si elle ne correspond pas, aucune décision n’est affichée. Le dry-run lit le vrai Docker, mais n’exécute aucune action et ne modifie pas l’état JSON. Il peut créer le répertoire et le fichier de verrouillage.
3. Planifier toutes les minutes
Après vérification, créez ~/.local/bin/monit-docker-web avec ce contenu. Cette version exécute réellement les redémarrages correspondants.
mkdir -p "$HOME/.local/bin" "$HOME/.local/state/monit-docker"#!/bin/sh
export MONIT_DOCKER_LOGFILE="$HOME/.local/state/monit-docker/monit-docker.log"
export MONIT_DOCKER_RUNTIMEDIR="$HOME/.local/state/monit-docker/run"
exec "$HOME/.local/share/monit-docker/venv/bin/monit-docker" \
--name 'web*' cron \
--state-file "$HOME/.local/state/monit-docker/web.json" \
--cooldown 300 \
--cmd-if 'mem_percent > 90 ? restart'chmod 700 "$HOME/.local/bin/monit-docker-web"
crontab -eAjoutez la ligne suivante, en remplaçant USER par votre compte et en adaptant son répertoire personnel. Le même compte doit avoir accès à Docker.
* * * * * /home/USER/.local/bin/monit-docker-web >> /home/USER/.local/state/monit-docker/cron.log 2>&1
4. Régler les délais
--cooldown 300 espace les tentatives d’une même règle pour un même identifiant complet de conteneur de cinq minutes. Une tentative qui échoue réserve aussi ce délai.
Pour attendre cinq minutes de dépassement observé avant une action, ajoutez --trigger-after 300 --max-gap 120. Avec un cron chaque minute, un intervalle entre observations supérieur à 120 secondes réinitialise l’attente. Les dry-runs n’accumulent pas cet historique.
Conservez le fichier d’état et son répertoire sur un système de fichiers local persistant. Un même chemin coordonne les exécutions concurrentes. Ne supprimez pas le fichier .lock pour débloquer une exécution.
5. Vérifier et arrêter
Consultez cron.log, le journal de l’agent et l’état du conteneur dans Docker. Un résultat cooldown signifie que le délai bloque temporairement une nouvelle tentative. Les codes 117 et 118 signalent respectivement un verrou occupé et une erreur d’état.
Pour arrêter la planification, retirez la ligne du crontab. Gardez le fichier d’état pour conserver les délais lors d’une reprise.