我有分布在太阳能系统周围的数据记录器,以及一个在午夜运行的单一程序,用于收集当天的数据并将其存储在硬盘上。
Ubuntu 服务器上的 bash 脚本遍历 7 个 Raspbian 单元,这些单元收集了数据并将其放在硬盘驱动器上的适当位置,在由单元命名的目录中。我想出了如何获取通用名称 today.dat 和 today.png 并将它们与存档中的日期一起保存,例如 2017-08-10.png 和 2017-08-10.dat
--> 有时其中一个单元由于某些问题或其他原因没有响应,它会阻止程序的执行。
因此,我想在决定是否尝试从中收集数据之前,先使用 ping 测试系统是否响应。
我的系统名称都在 /etc/hosts 文件中,所以我按名称引用它们。
出于这个问题的目的,我正在检查 SOLAR - 监控充电控制器和逆变器行为的一个。
这是我尝试过的:
if $( ping -c 1 SOLAR | grep icmp* | wc -l ) eq 0
then
(do stuff like ssh -e "gnuplot makepng" then scp the png and raw data)
fi
(太复杂)
和
if [ $(ping -c 1 SOLAR >/dev/null) eq 0 ]
then do the stuff
fi
(看起来不错,但我不明白需要方括号)
一定会有更好的办法。
我希望做一些更像
if $(ping -c 1 SOLAR) eq 0
then
(do stuff)
else
(then maybe echo "SOLAR didn't respond" | ssmtp [email protected]
fi
几十年来我没有编写过 bash 程序——大部分时间都使用 C shell。而且我在网上得到了太多关于最佳方法的不同建议。
那么有人可以建议一个简单的方法来做到这一点吗?
您似乎只对退出状态感兴趣,
ping
即您是否正在从主机获取 ICMP ECHO_RESPONSE 到您的 ECHO_REQUEST;如果主机正在发送响应,如果没有响应并且对于未知主机,您可以执行ping -c 1 ...
并ping
退出状态。0
1
2
您可以轻松地将其与
if
构造一起使用;您不需要计算响应,只需使用ping
asif
的条件if
来评估退出状态ping
以继续到任何定义的分支:我正在将
ping
的 STDOUT 和 STDERR 流重定向到,/dev/null
因为我们对它们不感兴趣。