J'ai un script qui fonctionne bien quand je ssh sur le serveur pour l'exécuter moi-même, mais qui a des problèmes quand Hudson , un serveur d'intégration continue, l'exécute.
J'automatise des tests sur un système Linux embarqué (la cible). La cible est connectée au serveur A (RHEL 5) via série et exploitée via minicom. Le serveur B (FC 12) construit les tests qui s'exécutent réellement sur la cible et peut ssh vers le serveur A. Le serveur C (RH) héberge Hudson, avec le serveur B comme esclave.
J'ai écrit un script runscript (http://linux.die.net/man/1/runscript) pour faire tout ce qui est nécessaire sur la cible réelle; il démarre l'image, monte un répertoire à partir du serveur B et exécute les tests. Un script bash sur le serveur B appelle minicom avec le script runscript ainsi que certaines actions compagnes. J'ai un script bash sur le serveur B qui utilise
ssh -t -t ServerA bashScript.sh
pour exécuter ces tests sur la cible. Je suis sur le serveur C, je peux faire exécuter ces tests en faisant ssh sur le serveur B et en exécutant le script qui ssh sur le serveur A qui exécute minicom avec runscript. Ouf. Réviser:
Serveur A: Hudson utilise son mécanisme esclave pour ssh vers le serveur B.
Serveur B: kickOffTests.sh
a la lignessh -t -t ServerA runTests.sh
Serveur A: runTests.sh
appelle un script perl qui appelleminicom -S my.script ttyE1
Cible, après le démarrage: monte un répertoire à partir du serveur B, où se trouvent les tests, et entre dans ce répertoire. Il appelle encore un autre script bash, qui exécute les tests, qui sont des exécutables C compilés.
Maintenant, quand j'exécute un de ces scripts moi - même, ils font ce qu'ils devraient. Cependant, lorsque Hudson essaie de faire la même chose, au cours de la session minicom, il se plaint d'une ligne dans le "encore un autre script bash" qui invoque l'exécutable C , avec./executable
./executable: cannot execute binary file
J'ai encore beaucoup à apprendre sur Linux, mais je suppose que ce problème est dû au fait que Hudson ne se connecte pas à une console. Je ne sais pas exactement ce que fait Hudson pour contrôler son esclave. J'ai essayé d'utiliser la ligne export TERM=console
dans la configuration juste avant d'exécuter kickOffTests.sh, mais le problème persiste.
Quelqu'un peut-il m'expliquer ce qui se passe et comment je peux y remédier? Je ne peux supprimer aucun des serveurs de cette équation. Il peut être possible de supprimer minicom de l'équation, mais cela ajouterait une quantité de temps inconnue à ce projet, donc je préférerais de loin une solution qui utilise ce que j'ai déjà.
la source
Cela peut arriver si vous manquez la ligne shebang en haut de votre script. Assurez-vous que le script commence par:
Cela ne m'est apparu que lorsque j'ai exécuté le script avec
sudo -u <user>
la source