Mam skrypt, który działa dobrze, gdy ssh do serwera, aby go wykonać, ale ma problemy, gdy Hudson , serwer ciągłej integracji, uruchamia go.
Automatyzuję testy we wbudowanym systemie Linux (cel). Cel jest połączony z serwerem A (RHEL 5) szeregowo i obsługiwany przez minicom. Serwer B (FC 12) buduje testy, które faktycznie działają na obiekcie docelowym i może ssh do serwera A. Serwer C (RH) hostuje Hudson, z serwerem B jako slave.
Napisałem skrypt runcript (http://linux.die.net/man/1/runscript), aby zrobić wszystko, co potrzebne w rzeczywistym celu; uruchamia obraz, montuje katalog z serwera B i wykonuje testy. Skrypt bash na serwerze B wywołuje minicom wraz ze skryptem runcript wraz z pewnymi akcjami towarzyszącymi. Mam skrypt bash na serwerze B, który używa
ssh -t -t ServerA bashScript.sh
aby testy te zostały uruchomione na obiekcie docelowym. Jestem na serwerze C, mogę uruchomić te testy poprzez ssh'ing na serwerze B i wykonanie skryptu ssh na serwerze A, który wykonuje minicom z runcript. Uff Recenzować:
Serwer A: Hudson używa swojego mechanizmu podrzędnego do ssh na serwerze B.
Serwer B: kickOffTests.sh
ma linięssh -t -t ServerA runTests.sh
Serwer A: runTests.sh
wywołuje skrypt Perla, który się wywołujeminicom -S my.script ttyE1
Cel po uruchomieniu: Montuje katalog z serwera B, na którym znajdują się testy, i wchodzi do tego katalogu. Wywołuje kolejny skrypt bash, który uruchamia testy, które są skompilowanymi plikami wykonywalnymi C.
Teraz, kiedy mam wykonać żadnego z tych scenariuszy się, robią to, co powinny. Jednak gdy Hudson próbuje zrobić to samo, w sesji minicom narzeka na wiersz w „jeszcze innym skrypcie bash”, który wywołuje plik wykonywalny C ./executable
, z./executable: cannot execute binary file
Nadal mam wiele do nauczenia się na temat Linuksa, ale podejrzewam, że ten problem wynika z braku połączenia Hudsona z konsolą. Nie wiem dokładnie, co Hudson robi, aby kontrolować swojego niewolnika. Próbowałem użyć linii export TERM=console
w konfiguracji tuż przed uruchomieniem kickOffTests.sh, ale problem pozostaje.
Czy ktoś może mi wyjaśnić, co się dzieje i jak mogę to naprawić? Nie mogę usunąć żadnego serwera z tego równania. Możliwe, że uda się wyciągnąć minicom z równania, ale dałoby to nieznany czas temu projektowi, więc wolałbym rozwiązanie, które wykorzystuje to, co już mam.
źródło
Może się to zdarzyć, jeśli brakuje linii shebang na górze skryptu. Upewnij się, że skrypt zaczyna się od:
To pokazało mi się tylko wtedy, gdy uruchomiłem skrypt
sudo -u <user>
źródło