Tengo un script que funciona bien cuando ssh al servidor para ejecutarlo yo mismo, pero tiene problemas cuando Hudson , un servidor de integración continua, lo ejecuta.
Estoy automatizando las pruebas en un sistema Linux integrado (el objetivo). El objetivo está conectado al servidor A (RHEL 5) a través de serie y operado a través de minicom. El servidor B (FC 12) construye las pruebas que realmente se ejecutan en el destino, y puede enviar ssh al servidor A. El servidor C (RH) aloja Hudson, con el servidor B como esclavo.
He escrito un script de runcript (http://linux.die.net/man/1/runscript) para hacer todo lo necesario en el objetivo real; arranca la imagen, monta un directorio desde el Servidor B y ejecuta las pruebas. Un script bash en el Servidor B invoca minicom con el script runcript junto con algunas acciones complementarias. Tengo un script bash en el Servidor B que usa
ssh -t -t ServerA bashScript.sh
para ejecutar esas pruebas en el objetivo. Estoy en el servidor C, puedo hacer que esas pruebas se ejecuten enviando ssh' al servidor B y ejecutando el script que ssh's al servidor A que ejecuta minicom con runcript. Uf. Para revisar:
Servidor A: Hudson usa su mecanismo esclavo para enviar ssh al Servidor B.
Servidor B: kickOffTests.sh
tiene la líneassh -t -t ServerA runTests.sh
Servidor A: runTests.sh
llama a un script perl que invocaminicom -S my.script ttyE1
Destino, después del arranque: Monta un directorio desde el Servidor B, donde están las pruebas, y entra en ese directorio. Invoca otro script bash, que ejecuta las pruebas, que son compilados en C ejecutables.
Ahora, cuando me ejecutar cualquiera de estas secuencias de comandos a mí mismo, que hacen lo que deberían. Sin embargo, cuando Hudson intenta hacer lo mismo, en la sesión de minicom se queja de una línea en "otro script bash" que invoca el ejecutable C ./executable
, con./executable: cannot execute binary file
Todavía tengo mucho que aprender sobre Linux, pero supongo que este problema es el resultado de que Hudson no se conecta con una consola. No sé exactamente qué hace Hudson para controlar a su esclavo. Intenté usar la línea export TERM=console
en la configuración justo antes de ejecutar kickOffTests.sh, pero el problema persiste.
¿Alguien puede explicarme qué está sucediendo y cómo puedo solucionarlo? No puedo eliminar ninguno de los servidores de esta ecuación. Puede ser posible eliminar el minicom de la ecuación, pero eso agregaría una cantidad de tiempo desconocida a este proyecto, por lo que preferiría una solución que use lo que ya tengo.
fuente
Esto puede suceder si te falta la línea shebang en la parte superior de tu script. Asegúrese de que el script comience con:
Esto solo apareció para mí cuando ejecuté el script con
sudo -u <user>
fuente