这是一个益智游戏。如果我从命令行运行一个命令来远程复制一个文件,它完美的工作。如果我在服务器(托管Hudson)的脚本内部运行相同的命令,它也可以完美地运行,与从命令行运行hudson一样。但是,如果我运行的确切命令从哈德森工作bash脚本里面的函数,它失败:在Hudson调用的脚本中运行cp命令失败
cp: cannot stat '/opt/flash_board.tar.gz': No such file or directory
的变量定义为:
original_tarball=flash_board.tar.gz
,并在范围(可变扩展在脚本中正常工作)。
原来的命令是:
ssh -n -o stricthostkeychecking=no [email protected]$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak
我也尝试过为:
ssh -n -p 1601 -o stricthostkeychecking=no [email protected]$IP_ADDRESS cp /opt/$original_tarball /opt/$original_tarball.bak
指向正确的端口,但在完全相同的方式失败。
仅供参考,所有变量都被检查为有效。我本来以为这是一个替代误差,但是这似乎并不如此,所以后来我试图与哈德森凭据运行它:
sudo -u hudson ssh -n -o stricthostkeychecking=no [email protected]$IP_ADDRESS ssh -n -o stricthostkeychecking=no 169.254.0.2 cp /opt/$original_tarball /opt/$original_tarball.bak
我得到同样的结果(它的工作原理)。所以只有当这个命令从Hudson作业运行时才会失败。
这里的事件序列:
- 哈德森工作组&调用一个shell脚本参数。
- 脚本中的函数试图通过SPI总线将文件从嵌入式Montevista(Linux)板远程复制到第二块嵌入式Arago(Linux)板
- 两块板在物理上位于同一个主板上,但是没有办法直接访问Arago板,除非通过串行控制台会话(这是不可行的,这是一个跨网络运行的自动化作业)。
我试过这个使用ssh与-p 1601(正确的端口到阿拉戈方面)。
我可以使用scp将远程文件复制到具有不同文件扩展名的远程文件所在的位置吗?
喜欢的东西:
scp -o stricthostkeychecking=no [email protected]$IP_ADDRESS /opt/$original_tarball /opt/$original_tarball.bak
我有一对夫妇的开发者的看看这个,他们被难倒为好。 (A)为什么这会失败&(B)如何解决它。我很确定我可以编写脚本在远程机器上本地运行,但似乎并不需要。
哦,如果我上运行Montevista板相同的指令(这意味着我没有跨越SPI总线(169.254.0.2)去,从哈得逊工作完美。
部署图请问?我很困惑你的第五代码块中的双重ssh。我将-vv放在ssh上,并从测试脚本中尽可能多地打印出环境信息(PATH,'cp'等)以找出差异。 – themel
@themel。我太新了,无法上传图片。双ssh允许我从hudson服务器转到Montevista板,Montevista板通过SPI链接与Arago板交流,所以第二个ssh到169.254.0.2就是为了跳跃。我无法直接访问Arago板,我必须通过端口1601或执行双重ssh才能到达那里(这两种方法都可以与任何其他bash命令一起工作,但我必须小心,因为那里是两个主板上的不同版本的busybox)。 – delliottg
检查文件权限。 –