如何获取远程机器上的 systemctl 状态

如何获取远程机器上的 systemctl 状态

当我们在远程机器上运行这个时,我们得到

ssh $IP "systemctl disable iptables.service"

标准误差为

echo $?

0

但运行它时出现错误(我添加了错误的语法)

例如

ssh $IP "systemctl disable_bug iptables.service"

为什么我们从标准错误中得到 0?尽管命令失败!

echo $?
0

答案1

您正在回显 ssh 命令的结果 - 两次都成功完成(即 ssh 正常)。您没有显示通过 ssh 运行的命令的结果。

如果将命令的输出直接发送到文件(通过 tee 或只是正常重定向),则可以稍后收集结果。

编辑

由于反对票(我推测是 OP 没有意识到我已经回答的是正确的(见评论)),我正在扩展这个答案。

当你运行时echo $?,它将输出上次运行的退出代码当地的命令。例如:

$ ssh user@host 'ls /tmp' 
lastSubredditNeighborsRun.log
meetupDumper.log
mongodb-27017.sock

$ echo $?
0

这是返回代码远程控制-不是远程运行的返回代码ls

运行echo $?可能也不会显示任何内容:

$ ssh user@host 'ls /tp' && echo $?
ls: cannot access /tp: No such file or directory

或者它可能会显示错误返回代码 - 如果您没有在命令行上链接运行它:

$ ssh user@host 'ls /tp'
ls: cannot access /tp: No such file or directory
$ echo $?
2

ssh 可能会将发送的命令的错误代码发回 - 它应该如此 - 作为它自己的错误代码......但并非总是如此。

但跑步echo $?总是只能回显最近运行的错误代码当地的命令。如果 ssh 将远程错误代码作为自己的代码返回,那就太棒了。但如果没有(或者远程命令没有发送错误代码),您将获得预期的结果echo $?- 即0如果上一个命令成功运行。

相关内容