Forum général.général [Asterisk] Comment scripter ça ? (module load app_stack.so)

Posté par  (site web personnel) . Licence CC By‑SA.
1
13
juin
2024

Bonjour,

Notre administrateur système est débordé et il m’a juste donné une petite recette à exécuter « à la main » dès lors que « nous n’avons plus de téléphone » dans nos bureaux :/

1°) me connecter au serveur (en ssh)
2°) asterisk -rv
3°) module load app_stack.so
4°) Ctrl+C (pour sortir de là)
5°) se déconnecter du serveur (Ctrl+D)

Et ça fonctionne, dans 90 % des cas. Car le problème est parfois plus grave et nécessite, soit un redémarrage du service, soit une intervention divine (= le sysadmin débordé).

Je sais pas exactement ce qui se passe ni l’origine du problème :(

Mais j’aimerais bien que cela soit scripté dans un cron exécuté chaque minute…
Il faudrait
• pouvoir tester et détecter la panne
• le cas échéant faire l’équivalent de la petite recette ci-dessus.

(Asterisk 11.13.1~dfsg-2+deb8u8)

Qu’en pensez-vous ?

PS: Je suis capable de comprendre des commandes bash et d’ajouter un cron.

Merci d’avance.

  • # script via ssh

    Posté par  (site web personnel) . Évalué à 4. Dernière modification le 13 juin 2024 à 13:38.

    Mais j’aimerais bien que cela soit scripté

    ssh te permet d'exécuter des scripts distants :

    ssh admin@asterisk.example.com 'asterisk -rv ; module load app_stack.so'

    tu auras déclaré ta clé publique (id_rsa.pub) sur le compte admin du serveur asterisk.example.com au préalable, pour ne pas avoir à rentrer ton mot de passe…

    dans un cron exécuté chaque minute…

    ça, ce n'est pas la meilleure idée du monde, surtout si le traitement peut durer plus d'une minute… outre les logs à outrance que cela peut générer si le traitement part en vrille (il y a toujours des cas d'erreur auquel on n'a pas pensé :/)
    si chaque utilisateur commence à faire cela, cela peut faire pas mal de connexions concurrentes…

    pouvoir tester et détecter la panne

    déjà identifier les commandes permettant d'avoir le statut de fonctionnement (soit par un client local, soit par une commande sur le serveur) ce serait pas mal ;-)

    bref, t'en as trop dit, ou pas assez :-) ça manque de contexte :/ (notamment, tes commandes sont-elles interactives ?)

    qui le lancerait ? qui l'utilise ? traçabilité des accès ?
    combien de fois ça arrive ? combien de personnes concernées ?
    comment ça se passe si tu n'es pas là ? comment c'est géré s'il y a un changement de version d'asterisk qui modifie le comportement ?

  • # automatisation

    Posté par  . Évalué à 3.

    S'il faut croner, c'est sur le serveur.
    Et un script avec un check de bon fonctionnement et la commande de résolution mis en daemon est probablementune meilleure solution.

  • # beark

    Posté par  (site web personnel) . Évalué à 2.

    Les soucis sont nombreux dans cette histoire:
    - debian 8, on parle d'une distro qui date de 2015, derniere update en 2018
    - asterisk 11 …

    je veux bien entendre que l'admin soit deborde mais la c'est de l'inconscience a ce niveau

    Au vu du "fix" il doit y avoir un watchdog/cron qui redemarre asterisk regulierement et aleatoirement le chargement du module pour gerer les fonctions dans les macros asterisk ne se charge pas.

    Ma premiere reaction serait de modifier le modules.conf pour forcer le chargement du module ("load app_stack.so") voir meme le passer en required ("require app_stack.so")

    Deuxieme reaction serait de mettre a jour le bouzin

    Si vous souhaiter vraiment persister dans le hack, le script suivant devrait gerer le probleme en question, a executer en local depuis le serveur asterisk:

    #!/bin/bash
    set -o nounset -o pipefail -o errexit
    
    if ! asterisk -x "module show" | grep -q "app_stack"; then
      asterisk -x "module load app_stack"
    fi
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.