如何通过测试执行SSH时知道谁失败了

耶尔

假设我想通过ssh做一些测试

例子

ssh 18.23.24.2 2>/dev/null "smartctl -a /dev/sdb -q silent"

echo $?
1

在这种情况下,我们得到退出代码1

如何知道问题是关于ssh还是关于smartctl命令?

由于许多过程都使用相同的值,因此确定很困难。

% ssh 2>/dev/null localhost 'exit 255' ; echo $?
255
% ssh 2>/dev/null nopelocalhost 'exit 0' ; echo $?
255

借助启发式方法,您可以根据常用的退出代码来猜测哪个代码来自哪个程序。除非所涉及的程序重叠或发生意外情况,否则这几乎是正确的。标准错误可能存在或可能不存在,并且退出代码可能会更改,具体取决于程序如何退出:

% ssh localhost ./segfault ; echo $?
255
% ./segfault ; echo $?
zsh: bus error  ./segfault
138
% 

因此,猜测从何$?而来并不是那么可靠相反,更好的选择可能是设计一种协议,该协议传达的信息比退出状态字所提供的信息更多。例如,Nagios或Ansible不仅$?可以确定远程命令的运行方式,还可以进行更多的通信这可能很简单,只需一行取决于smartctl运行方式(或分段运行或...)的文本,也可以是更复杂的东西,例如带有标准输出,错误,退出状态字和其他此类元数据的JSON结构。因此smartctlsmartctl与其直接运行,不如调用运行并解析其输出的包装程序,并在另一端ssh收集该输出。如果输出不可用,则说明出现了问题ssh,或使用包装程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

断言失败时继续执行Python的单元测试

如何知道谁创造了房间?

测试失败后如何执行代码

断言失败后如何继续测试执行?

我不知道如何在执行ffmpeg命令时获取成功或失败消息

如何通过SSH执行Bash别名

第一次测试失败时如何停止GTest测试用例的执行

仅在登录失败时如何停止量角器执行,而如果登录通过则如何正常运行所有测试

断言失败时仍通过Mocha测试

通过python paramiko ssh会话执行Wine命令时失败

通过perlbrew安装perl时如何重新运行测试失败?

当我通过ssh执行bash脚本时,如何查看“ read -p”的文本?

如何知道谁发起了线程

如何通过Bamboo执行硒测试?

如何在不知道远程用户的登录shell的情况下通过ssh执行任意简单的命令?

您如何知道谁依赖该项目?

如何通过SSH执行远程别名?

通过ssh执行命令时如何避免“歧义重定向”

如何使NUnit在失败时停止执行Class中的测试

当通过ssh在远程主机上执行telnet时,该如何在telnet中制表符?

对远程计算机执行ssh测试时,如何创建“远程主机标识”方案

单元测试在应该失败时通过

如何跟踪谁通过 SSH 进入我的 Linux 机器?

SequelizeJS:在执行 INSERT 原始查询时如何知道成功或失败?

在 TravisCI 上使用 Detox 进行测试时,如何获得写入变量/文件的测试(失败/通过)结果

TestNG 如何在测试失败时执行 beforeclass() 方法

rxjs,如何通过两个触发器获取最新数据并知道谁被触发?

这个脚本如何知道“currentPlayer”是谁?

如何强制测试套件首先运行并在失败时退出整个 Jest 执行?