2010-11-01 5 views

Répondre

1

Si vous êtes intéressé par une activité de processus de très bas niveau, vous pouvez exécuter l'interpréteur python sous strace avec l'erreur standard redirigée vers un fichier.

Si vous êtes uniquement intéressé à inspecter le code python lorsque votre se bloque bot, et vous avez l'emplacement dans la source où l'accident se produit, vous pouvez envelopper cet endroit avec try/except et break into the debugger dans la clause except:

import pdb; pdb.set_trace() 

Vous aurez probablement besoin de lancer votre bot en mode non démon pour que cela fonctionne.

1

Si vous savez qu'il fonctionne toujours, vous pouvez le pstack pour voir son retour. Je ne sais pas à quel point cela sera utile parce que vous verrez la pile d'appel de l'interprète. Vous pourriez également essayer strace ou ltrace comme quelqu'un d'autre mentionné.

Je m'assurerais également que dans tout environnement dans lequel le script s'exécute, vous avez défini ulimit -c unlimited pour qu'un noyau soit généré dans le cas où python se bloque complètement.

Une autre chose que je pourrais essayer est d'avoir ce travail exécuté par un parent qui n'attend pas son enfant. Cela devrait faire en sorte que l'entrée de la table proc reste comme un zombie, même lorsque le travail sous-jacent s'est terminé.

0

Vous voudrez peut-être essayer Python psutils, c'est quelque chose que j'ai utilisé et qui fonctionne.

0

Un moyen pas cher pour obtenir quelques indices supplémentaires sur le problème serait de commencer Phenny avec

/etc/init.d/phenny start 2>/tmp/phenny.out 1>&2 

Quand il tombe en panne, vérifiez la queue de /tmp/phenny.out pour le retraçage Python.

0

Si vous avez seulement besoin de vérifier que le processus est en marche, vous pouvez simplement exécuter un script qui vérifie la sortie de la commande

ps ax | grep [p] henny

toutes les quelques secondes. Si c'est vide, alors évidemment le processus est mort.

Questions connexes