У меня есть сценарий, который хорошо работает, когда я сам выполняю ssh на сервере, но у меня возникают проблемы, когда Hudson , сервер непрерывной интеграции, запускает его.
Я автоматизирую тесты на встроенной системе Linux (цель). Цель подключена к серверу A (RHEL 5) через последовательный порт и работает через миником. Сервер B (FC 12) создает тесты, которые фактически выполняются на целевом сервере, и может подключиться к серверу A. Сервер C (RH) обслуживает Hudson, а Сервер B является ведомым.
Я написал скрипт runScript (http://linux.die.net/man/1/runscript), чтобы сделать все необходимое для фактической цели; он загружает образ, монтирует каталог с сервера B и выполняет тесты. Сценарий bash на сервере B вызывает minicom со сценарием runScript и некоторыми сопутствующими действиями. У меня есть скрипт bash на сервере B, который использует
ssh -t -t ServerA bashScript.sh
чтобы запустить эти тесты на цель. Я на сервере C, я могу запустить эти тесты, выполнив команду ssh на сервере B и выполнив сценарий, который ssh на сервере A, который выполняет minicom с runScript. Уф. Для просмотра:
Сервер A: Hudson использует свой подчиненный механизм для связи с сервером B.
Сервер B: kickOffTests.sh
имеет линиюssh -t -t ServerA runTests.sh
Сервер A: runTests.sh
вызывает Perl-скрипт, который вызываетminicom -S my.script ttyE1
Цель после загрузки: монтирует каталог с сервера B, где находятся тесты, и входит в этот каталог. Он вызывает еще один скрипт bash, который запускает тесты, которые представляют собой скомпилированные исполняемые файлы на языке Си.
Теперь, когда я сам выполняю любой из этих сценариев, они делают то, что должны. Однако, когда Хадсон пытается сделать то же самое, в сеансе minicom он жалуется на строку в «еще одном скрипте bash», которая вызывает исполняемый файл C ./executable
, с./executable: cannot execute binary file
Мне еще многое предстоит узнать о linux, но я предполагаю, что эта проблема является результатом того, что Хадсон не соединяется с консолью. Я не знаю точно, что делает Хадсон, чтобы контролировать своего раба. Я попытался использовать строку export TERM=console
в конфигурации непосредственно перед запуском kickOffTests.sh, но проблема остается.
Может кто-нибудь объяснить мне, что происходит и как я могу это исправить? Я не могу удалить ни один из серверов из этого уравнения. Может быть возможно вывести minicom из уравнения, но это добавит неизвестное количество времени к этому проекту, поэтому я бы предпочел решение, которое использует то, что у меня уже есть.
источник
Это может произойти, если вы пропустите строку shebang в верхней части вашего сценария. Убедитесь, что скрипт начинается с:
Это проявилось только для меня, когда я запустил скрипт с
sudo -u <user>
источник