Question Comment déboguer les scripts Upstart?


Pour une raison quelconque, je reçois un erreur lors des mises à niveaudont la cause est

% sudo service apport start
start: Job failed to start

Sous sysvinit, je pourrais déboguer ce genre de problème en exécutant par exemple

sudo sh -x /etc/init.d/whatever start

mais cela ne semble pas correspondre à Upstart. Que dois-je essayer ensuite?

Il s'avère il y a une solution de contournement qui laissera l'installation se poursuivre. Mais je suis toujours intéressé par la question générale de savoir comment tracer le script.


67
2018-04-21 00:01


origine


Je travaille sur une réponse plus approfondie, mais merci pour le lien vers la solution de contournement, la même chose m'est arrivée pour mettre à jour natty aujourd'hui! - Mark Russell
Haha, et ils ont publié le correctif il y a 12 minutes. La bêta n'est-elle pas amusante? (pas vraiment!) - Mark Russell
+ Muhammad a posté la bonne réponse ci-dessous. - Travis Reeder
J'ai trouvé des informations de débogage utiles dans /var/log/syslog. - Matt


Réponses:


Toutes les informations suivantes (et beaucoup plus utiles aide Upstart) est de Le livre de cuisine Upstart. La section 18 couvre le débogage. http://upstart.ubuntu.com/cookbook/#debugging

Dans ce cas spécifique de traçage d'une strophe "script" d'un travail Upstart, vous devez ajouter les lignes suivantes juste en dessous du mot "script":

exec 2>>/dev/.initramfs/myjob.log
set -x

L'emplacement étrange est dû au fait que /dev/.initramfs/ est disponible au tout début du démarrage, avant que le système de fichiers racine ait été chargé et continue d'être disponible après le démarrage. Je devine avec apport, cependant, vous ne le faites probablement pas avoir besoin utiliser ce chemin. Pourtant, il est bon de connaître l'option.

Il convient également de noter que tous les scripts sont exécutés avec set -e Ainsi, toute commande qui échoue quitte le script entièrement. Ce qui est logique, car il faut être très prudent lors de l'exécution de scripts en tant que root.

Je recommande fortement de consulter le livre de recettes Upstart ci-dessus en général pour toute personne travaillant avec des travaux Upstart.


29
2018-04-21 00:52



Merci pour cela, si je n'avais pas vu le bogue résolu, j'aurais probablement modifié le script pour l'activer set -x comme vous le suggérez. Je me demandais surtout s'il y avait une façon plus propre de le faire. - poolie
Oui, pas que je sache (et si ce n'est pas dans le livre de recettes, cela signifie probablement que non). En dehors de cette idée, la plupart des techniques de débogage mentionnées concernent davantage le dépannage des événements Upstart et Upstart eux-mêmes, ce qui est généralement le cas. :) - Mark Russell
Et pourtant, cette méthode échouera si setuid et setgid sont utilisés dans les emplois. - 0xC0000022L
/dev/.initramfs n'est pas toujours présent. Je viens de croiser une machine qui n'a pas ce chemin. - Sarge Borsch


Upstart enregistre votre exécution de service dans un fichier journal du même nom dans /var/log/upstart/your-service-name.log. Cela devrait être utile.


110
2017-09-02 15:32



Bien, il semble que cela inclut le stderr des emplois, donc si je me suis allumé set -x ce serait probablement là-bas. - poolie
Je mets une instruction de journal basée sur l'écho dans mon script /etc/init.d/Xservice mais elle n'apparaît pas à cet endroit! OS: Ubuntu 14.04 Trusty - Champ
Pourquoi ne pas syslog? Puis-je suggérer une fonctionnalité générale, peut-être rsyslog lui-même, que upstart et n'importe quel composant utiliserait pour écrire dans syslog s'il n'est pas disponible, ou dans un emplacement temporaire qui serait transféré à syslog dès que possible. Cela m'a pris une demi-journée pour le trouver. Veuillez transmettre cette remarque TIA. - Papou
Cela ne semble plus être vrai en 16.04, apparemment depuis 15.10 au moins: les derniers fichiers de ce répertoire sont datés de juste avant la version 15.10. - FGM
@FGM c'est parce que 16.04 n'utilise plus le démarrage, il utilise systemd. Les journaux sont accessibles avec journalctl - Jeremy