Comment déboguer un travail parvenu?

10

J'ai le travail suivant dans /etc/init/collector:

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

Lorsque je commence le travail sudo service collector start, il se bloque. Si je ctrl-ccours initctl list, je vois ceci:

collector start/killed, process 616

Je ne peux pas voir une instance du twistddémon dans ps, et le serveur HTTP qu'il est censé fournir n'existe pas.

J'ai même essayé cela sans «attendre le démon» et avec un simple appel à un script bash d'une ligne à l'aide d'une scriptstrophe, et cela ne fonctionne toujours pas. Je pense que je fais quelque chose de très mal. Qu'est ce que ça pourrait être?

Cera
la source
Pas de réponse, mais je me bats avec un problème similaire. Ce pourrait même être un bogue dans Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Je ne sais pas comment sortir de cet état de suspension autre que le redémarrage. Je crois aussi que cela a à voir avec la expect daemonligne.
nuire le

Réponses:

14

Vous pouvez rediriger stdoutet stderrdu shell entier en utilisant le scriptpragma (au lieu de exec) en conjonction avec exec >FILE 2>&1, comme ceci:

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

J'espère que cela devrait vous donner une meilleure idée de ce qui se passe. J'ai trouvé cela utile pour détecter toutes sortes de problèmes dans mes scripts parvenus. Vous pouvez diriger directement le stdout/ de votre commande stderr, mais vous passerez à côté des erreurs provenant du shell (comme les erreurs de syntaxe).

D'un autre côté, s'il serviceest suspendu, il se peut même qu'il ne frappe pas votre script, auquel cas rien de tout cela n'aidera, bien sûr.

Charles
la source
Merci, cela m'a mis sur la bonne voie. En fin de compte, j'ai canalisé la sortie vers logger, pour que je puisse juste faire la queue /var/log/syslog.
Cera
De plus, les erreurs dans le fichier conf lui-même sont affichées dans dmesg. J'ai découvert cela après que je n'obtenais aucune sortie lors de l'utilisation de ce qui précède. J'avais fait une faute de frappe dans la directive chdir.
codingFoo
Où mettez-vous ce code?
kev
2

Il y a aussi le console logdéclaratif, tel que défini ici: http://upstart.ubuntu.com/cookbook/#console-log

Je ne connais pas assez le upstart pour savoir s'il est activé par défaut, mais vous pouvez l'activer par job upstart, il sortira par défaut sur /var/log/upstart/<job>.log

Ehtesh Choudhury
la source
0

Validez l'existence du directeur parvenu et ajoutez le journal de la console avant la phase de script. (dans la version upstart supérieure puis 1.4 c'est la valeur par défaut)

journal de la console

script exec> / path / to / some_log_file 2> & 1 exec your_command_here end script

Pour plus d'informations, consultez le fil: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

zachlaniado
la source