J'ai un script de base qui génère divers messages d'état. par exemple.Rediriger la sortie des scripts enfants Bash
~$ ./myscript.sh
0 of 100
1 of 100
2 of 100
...
Je voulais envelopper dans un script parent, afin d'exécuter une séquence d'enfants-scripts et envoyer un e-mail à la fin d'ensemble, par exemple topscript.sh
#!/bin/bash
START=$(date +%s)
/usr/local/bin/myscript.sh
/usr/local/bin/otherscript.sh
/usr/local/bin/anotherscript.sh
RET=$?
END=$(date +%s)
echo -e "Subject:Task Complete\nBegan on $START and finished at $END and exited with status $RET.\n" | sendmail -v [email protected]
Je suis en cela comme:
~$ topscript.sh >/var/log/topscript.log 2>&1
Cependant, quand je lance tail -f /var/log/topscript.log
pour inspecter le journal que je ne vois rien, même si en cours d'exécution supérieure montre myscript.sh est actuellement en cours d'exécution et, par conséquent, produisant vraisemblablement des messages d'état.
Pourquoi le stdout/stderr des scripts enfants n'est-il pas capturé dans le journal des parents? Comment puis-je réparer ça?
EDIT: Je les exécute également sur une machine distante, connectée via ssh en utilisant une allocation pseudo-tty, par ex. ssh -t [email protected]
. Le pseudo-tty pourrait-il interférer?
Si la réponse de l'abri ci-dessous n'aide pas, vous pouvez essayer de réduire où cela ne va pas. Quelques choses à essayer: (1) Est-ce que './myscript.sh> tmp.log 2> & 1' écrit dans' tmp.log'? Sinon, c'est peut-être en vérifiant [[-t 1]] 'et en n'écrivant que des messages lorsque la sortie standard est un téléscripteur. (2) Une fois 'topscript.sh' terminé, voyez-vous des messages dans le journal? (En d'autres termes, est-ce juste qu'ils sont retardés? C'est ce que l'abri et les réponses d'un seul suggère.) – ruakh