web-dev-qa-db-fra.com

Tester la commande exec de smartmontools

TL; DR; Existe-t-il un moyen de tester la commande exec de la configuration de smartd de la même manière qu'il est possible de tester la commande mail?

En détails: Mon cas d'utilisation est que j'utilise monit pour surveiller mon serveur Ubuntu 18.04. Dans mon smartd.conf, je dis à smartmontools de:

/dev/sda -a -m root -M exec /usr/share/smartmontools/smartd-runner -M test
/dev/sdb -a -m root -M exec /usr/share/smartmontools/smartd-runner

Dans /etc/smartmontools/run.d/ J'ai un script appelé notify-monit.sh qui, lorsqu'il est appelé, crée un fichier dans /etc/monit/reports contenant le rapport de smartd. Puis dans /etc/monit/scripts J'ai un autre script bash qui est invoqué par monit comme vérification de programme qui renvoie 1 si le fichier existe ou 0 s'il n'existe pas. Monit vérifie ensuite le code de sortie et alerte s'il est! = 0.

Ce scénario est un peu complexe, donc je voudrais le tester de A à Z. J'exécute chaque script manuellement et ils fonctionnent bien séparément, mais je me sentirais toujours plus en sécurité de les tester tous dans un scénario réel démarré par smartd.

D'après ce que je comprends de la page de manuel de smartd -M test essaiera seulement d'envoyer un e-mail de test et je vois dans syslog qu'il fait exactement cela. Et seulement ça. Existe-t-il un moyen de tester l'ensemble de la chaîne exec?

1
Rychu

Après une enquête plus approfondie, je peux confirmer que -M test le commutateur exécute la commande exec.

Je pensais qu'il y avait un problème avec ça mais en fait le test fonctionnait correctement. L'ensemble du mécanisme, lorsqu'il était exécuté par smartd, ne fonctionnait tout simplement pas comme prévu et sans signaler aucune erreur. Il y a un problème avec run-parts, qui est utilisé par smartd-runner. Après quelques recherches, j'ai approché ce fil où quelqu'un a posté un lien vers ce rapport de bogue pour run-parts contenant la discussion pourquoi il ne prend pas en charge les scripts avec un point dans le nom .

Il suffisait de supprimer ".sh" se terminant de notify-monit.sh pour résoudre mon problème. Ensuite, le test a généré l'alerte dans monit avec succès.

Conseils pour les personnes dépannant les mêmes:

  • Vous pouvez temporairement echo quelque chose dans /usr/share/smartmontools/smartd-runner puis vérifiez cela dans /var/log/syslog pour être sûr que smartd invoque ce script
  • Tu peux courir run-parts --list --lsbsysinit /etc/smartmontools/run.d pour être sûr que run-parts "voit" vos scripts
0
Rychu