Saya memiliki skrip yang berfungsi dengan baik ketika saya ssh ke server untuk mengeksekusinya sendiri, tetapi memiliki masalah ketika Hudson , server integrasi berkelanjutan, menjalankannya.
Saya mengotomatiskan tes pada sistem linux tertanam (target). Target terhubung ke Server A (RHEL 5) melalui serial dan dioperasikan melalui minicom. Server B (FC 12) membangun tes yang benar-benar berjalan pada target, dan dapat ssh ke Server A. Server C (RH) host Hudson, dengan Server B sebagai budak.
Saya telah menulis skrip skrip skrip (http://linux.die.net/man/1/runscript) untuk melakukan semua yang diperlukan pada target aktual; mem-boot gambar, me-mount direktori dari Server B dan menjalankan tes. Skrip bash di Server B memanggil minicom dengan skrip skrip berjalan bersama beberapa tindakan pendamping. Saya memiliki skrip bash di Server B yang menggunakan
ssh -t -t ServerA bashScript.sh
untuk menjalankan tes tersebut pada target. Saya di Server C, saya bisa menjalankan tes tersebut dengan ssh'ing ke Server B dan mengeksekusi skrip yang ssh ke Server A yang mengeksekusi minicom dengan runcript. Wah. Untuk meninjau:
Server A: Hudson menggunakan mekanisme slave-nya untuk ssh ke Server B.
Server B: kickOffTests.sh
memiliki garisssh -t -t ServerA runTests.sh
Server A: runTests.sh
memanggil skrip perl yang memanggilminicom -S my.script ttyE1
Target, setelah boot: Memasang direktori dari Server B, tempat pengujian, dan memasuki direktori itu. Ini memanggil skrip bash lain, yang menjalankan tes, yang dikompilasi C executable.
Sekarang, ketika saya mengeksekusi salah satu dari skrip ini sendiri, mereka melakukan apa yang seharusnya. Namun, ketika Hudson mencoba untuk melakukan hal yang sama, selama sesi minicom itu mengeluh tentang garis dalam "skrip bash lain" yang memanggil C executable ./executable
,, dengan./executable: cannot execute binary file
Saya masih harus banyak belajar tentang linux, tetapi saya menduga masalah ini adalah akibat Hudson tidak terhubung dengan konsol. Saya tidak tahu persis apa yang dilakukan Hudson untuk mengendalikan budaknya. Saya mencoba menggunakan baris export TERM=console
dalam konfigurasi sebelum menjalankan kickOffTests.sh, tetapi masalahnya tetap ada.
Adakah yang bisa menjelaskan kepada saya apa yang terjadi dan bagaimana saya bisa memperbaikinya? Saya tidak dapat menghapus server mana pun dari persamaan ini. Dimungkinkan untuk mengambil minicom dari persamaan tetapi itu akan menambah jumlah waktu yang tidak diketahui untuk proyek ini, jadi saya lebih suka solusi yang menggunakan apa yang sudah saya miliki.
sumber
Ini bisa terjadi jika Anda kehilangan garis shebang di bagian atas skrip Anda. Pastikan skrip dimulai dengan:
Ini hanya muncul untuk saya ketika saya menjalankan skrip dengan
sudo -u <user>
sumber