2017-10-17 10 views
7

J'ai un processus que je veux commencer dès que mon système est rebooted par quelque moyen que j'utilisais upstart script pour cela mais parfois ce que je remarque est mon processus ne démarre pas pendant le redémarrage dur (brancher et démarrage de la machine) donc je pense que mon script parvenu ne sera pas kické après le redémarrage dur. Je crois qu'il n'y a pas de niveau d'exécution pour Hard Reboot.Comment faire pour déboguer un script par défaut qui échoue par intermittence?

Je suis confus que pourquoi parfois pendant le redémarrage il fonctionne, mais parfois cela ne fonctionne pas. Et comment puis-je déboguer cela?

ci-dessous est mon script arriviste:

# sudo start helper 
# sudo stop helper 
# sudo status helper 
start on runlevel [2345] 
stop on runlevel [!2345] 

chdir /data 
respawn 

pre-start script 
    echo "[`date`] Agent Starting" >> /data/agent.log 
    sleep 30 
end script 

post-stop script 
    echo "[`date`] Agent Stopping" >> /data/agent.log 
    sleep 30 
end script 

limit core unlimited unlimited 
limit nofile 100000 100000 
setuid goldy 
exec python helper.py 

Est-il possible de déboguer ce ce qui se passe? Je peux facilement reproduire ceci je crois. Des indications sur ce que je peux faire ici?

Note:

Au cours de redémarrage parfois je vois l'enregistrement que j'ai dans le script pre-start mais parfois je ne vois pas du tout l'enregistrement après le redémarrage et cela signifie que mon script arriviste n'a pas été déclenché. Y a-t-il quelque chose que je dois changer sur le niveau d'exécution pour le faire fonctionner?

J'ai une machine virtuelle qui s'exécute dans un hyperviseur et je travaille avec Ubuntu.

+1

Vous pouvez remplacer temporairement votre helper.py' 'python exec avec quelque chose comme:' 'script' exec 2 >>/chemin/vers/log.txt' 'set -x'' exec python helper.py' 'fin script'; de cette façon, vous avez un enregistrement dans '/ path/to/log.txt' de ce qui s'est passé au démarrage. –

+0

Pouvez-vous vérifier '/ var/log/upstart' et voir si cela a quelque chose dont vous avez besoin? –

+0

déjà vérifié et il n'y a rien dans ce que je crois. – john

Répondre

1

Votre processus s'exécute bien, MAIS pendant le démarrage du système beaucoup de choses vont en parallèle. SI le support (qui met à disposition le dossier /data) fonctionne plus tard que votre pre-start script, vous ne verrez pas les "résultats" de pre-start script.

Je propose de déplacer le sommeil 30 plus tôt (BTW 30 secondes semble trop looong):

pre-start script 
    sleep 30 # sleep 10 should be enough 
    echo "[`date`] Agent Starting" >> /data/agent.log 
end script 
+0

ok va l'essayer mais y at-il un autre niveau d'exécution que je peux utiliser qui garantira mon script upstart après l'exécution de tous les autres scripts upstart (comme mount) ? – john

+0

Si vous voulez être sûr que votre script s'exécute après le montage - plus spécifique après les montages locaux, entrez 'start on local-filesystems' - ceci fonctionne un peu plus tard que' start on runlevel [2345] ' –

+0

ok j'ai essayé en bougeant dormir juste au-dessus et encore il ne fonctionne pas quelques fois, donc je dois le démarrer manuellement. Mais ce que j'ai remarqué c'est que si j'utilise ce 'start on stop'r'' à la place de ma ligne' start' d'origine, cela fonctionne toujours selon mes tests. Savez-vous quelle pourrait être la différence avec mes nouveaux changements? – john