Eu tenho um script que funciona bem quando ssh no servidor para executá-lo, mas tem problemas quando o Hudson , um servidor de integração contínua, o executa.
Estou automatizando testes em um sistema Linux embutido (o destino). O destino está conectado ao servidor A (RHEL 5) via serial e operado pelo minicom. O servidor B (FC 12) cria os testes que realmente são executados no destino e pode ssh no servidor A. O servidor C (RH) hospeda Hudson, com o servidor B como escravo.
Eu escrevi um script runscript (http://linux.die.net/man/1/runscript) para fazer tudo o que é necessário no destino real; ele inicializa a imagem, monta um diretório do servidor B e executa os testes. Um script bash no Servidor B chama minicom com o script runscript, juntamente com algumas ações complementares. Eu tenho um script bash no servidor B que usa
ssh -t -t ServerA bashScript.sh
para executar esses testes no alvo. Estou no servidor C, posso executar esses testes ssh'ing no servidor B e executando o script ssh no servidor A que executa o minicom com o runcript. Ufa. Rever:
Servidor A: Hudson usa seu mecanismo escravo para ssh no servidor B.
Servidor B: kickOffTests.sh
tem a linhassh -t -t ServerA runTests.sh
Servidor A: runTests.sh
chama um script perl que chamaminicom -S my.script ttyE1
Destino, após a inicialização: Monta um diretório do Servidor B, onde estão os testes, e entra nesse diretório. Ele chama ainda outro script bash, que executa os testes, que são executáveis em C compilados.
Agora, quando eu executo qualquer um desses scripts, eles fazem o que devem. No entanto, quando Hudson tenta fazer a mesma coisa, na sessão minicom, ele reclama de uma linha no "ainda outro script bash" que chama o executável C ./executable
, com./executable: cannot execute binary file
Ainda tenho muito a aprender sobre linux, mas suponho que esse problema seja resultado do Hudson não se conectar a um console. Não sei exatamente o que Hudson faz para controlar seu escravo. Tentei usar a linha export TERM=console
na configuração imediatamente antes de executar o kickOffTests.sh, mas o problema permanece.
Alguém pode me explicar o que está acontecendo e como posso corrigi-lo? Não consigo remover nenhum servidor desta equação. Pode ser possível tirar o minicom da equação, mas isso adicionaria uma quantidade desconhecida de tempo a este projeto, por isso prefiro uma solução que use o que já tenho.
fonte
Isso pode acontecer se você estiver perdendo a linha shebang na parte superior do seu script. Verifique se o script começa com:
Isso só apareceu para mim quando executei o script com
sudo -u <user>
fonte