Comment faire face à un programme préemballé ne respectant pas la règle du silence?

Problème concret:

Mailman est livré avec un script pour synchroniser les abonnés à la list de diffusion à partir d'un file plat ( sync_members (8) ).

Ce script n'adhère pas très bien à la règle du silence . Par exemple, quand il n'y a rien à faire (par exemple les abonnés actuels et le file plat sont les mêmes), il affiche «Rien à faire». à stdout .

Comme nous exécutons ce programme toutes les quelques minutes et que toute sortie est enregistrée sur notre server de journalisation (avec rsyslogd ) qui envoie ensuite des e-mails quotidiens avec les journaux, il y a souvent beaucoup de messages inutiles.

Il y a plusieurs façons de faire face à cela, et je me request lequel est le plus approprié:

  1. Pipe stdout vers /dev/null .
  2. Utilisez le filtrage rsyslogd pour filterr spécifiquement ces messages.
  3. Modifiez le code source de sync_members pour qu'il respecte la règle de silence.
  4. Copiez le code source de sync_members , modifiez la copy et utilisez celle-ci à partir de maintenant.

Bien que chacun puisse atteindre le résultat souhaité, chacun a ses inconvénients:

  1. Et si à un moment donné il y avait quelque chose d'intéressant sur stdout ?
  2. Semble une solution plutôt "impure" et "hackerish" , et je pense qu'il y a beaucoup de programmes que nous ne respectons pas la règle du silence.
  3. Que se passe-t-il s'il y a une mise à jour?
  4. Même que 3.

J'ai tendance à l'option 2, mais si je dois le faire pour tous les programmes mal comportés de notre système …

Qu'est-ce que tu penses? Y a-t-il une option ou un argument supplémentaire en faveur ou contre? Y a-t-il une meilleure pratique pour ce cas (je pense que ce problème n'est pas nouveau)?

Deux suggestions:

  1. Déposer un rapport de bug contre mailman , afin que le développeur puisse corriger le bug pour tout le monde.

  2. Changer l'appel synch_members | egrep -v "Nothing to do." à synch_members | egrep -v "Nothing to do." synch_members | egrep -v "Nothing to do." Cela éliminera le «rien à faire». messages.

Vous sync_members option 5: écrivez un script wrapper qui redirige la sortie de sync_members et vérifie si c'est "Nothing to do".

Avec une bonne vérification du code de sortie, cela pourrait faire le travail plutôt bien. Il est relativement sûr de mise à jour – tant que le message "rien" ne change pas, votre script n'a pas besoin d'être maintenu.

Et vous pouvez décider comment gérer les cas d'erreur dans ce script (c.-à-d. Simplement cat le file journal, ou faire quelque chose de plus intéressant).

Si "Rien à faire" ne varie pas (ou peut être ramené à une regex), vous pouvez utiliser grep comme ceci:

  grep -v "Nothing to do" *.log 

A partir de maintenant, il y a beaucoup de choses que vous pourriez faire pour résoudre votre problème:

  • redirect la sortie de la command ci-dessus pour créer de nouveaux journaux "silencieux".
  • définir des fonctions et des alias basés sur la command ci-dessus à utiliser comme raccourcis dans vos sessions interactives (Vous pourriez même définir "Rien à faire en tant que variable d'environnement).
  • définir cron tâches cron qui automatiseront l'exécution de ces commands à intervalles réguliers.

Beaucoup pourrait être fait avec les outils Unix de base et un shell moderne. Je pense qu'il est un peu trop tôt pour décider de modifier un code source. Restez simple, cela vous évitera beaucoup de time perdu.