2

我正在编写一个快速而肮脏的脚本来检测服务器停机时间。我有一台服务器和两个远程客户端,它们每秒 ping 一次服务器以查看它是否已启动。

cron如果您最多可以运行每分钟一次,我将如何设置任务在客户端计算机上每秒运行一次?完成上述内容的最佳方法是什么?

此外,客户端机器可能会重新启动,程序需要继续运行(类似于此处的 cron)。

4

3 回答 3

3
while true; do ping -c 1 server | do stuff w/ output;sleep 1;done

要获得“编辑(可能重新启动)”的资格,只需创建一个重新启动循环的初始化脚本。

于 2013-04-14T22:08:37.667 回答
2

我知道你问过关于 ping 的问题。还有其他事情需要考虑。

获得“正常运行时间”的一种更合理的方法是使用查询数据库的东西,如 wtpmx、utmp 或其他用于此目的的文件。ping 协议 ICMP 可以并且将被繁忙的系统忽略。错过回报并不总是意味着系统已关闭。或者系统不工作。可能有很多原因。

考虑在现代 UNIX 机器上获得正常运行时间的一种方法:

ssh remoteserver 'uptime'

还要考虑“为什么”你正在ping。

Ping 可用于检查系统是否处于活动状态并响应 ping 数据包,但可能无法告诉您系统是否实际运行。这可能是您肯定想知道的。例如,数据库服务器或邮件服务器可能有一些挂起的进程。所以它对 ping 有响应,但很少做它打算做的事情。您可能想要构建一个比 ping 更有用的命令。我们每分钟登录一次服务器上的 24x7 prod 数据库,并让它运行一个 sql 脚本,该脚本会回应一些无害的东西,比如“OKAY”。例如,

select 'OKAY' from dual;
于 2013-04-15T01:02:10.350 回答
1

您可以在以下脚本的帮助下编写一个 cronjob 来实现此目的。

1 * * * * /bin/ping -c2 www.google.com | while read pong; do echo "$(date): $pong"; done >> ~/pings/google.com.log

它每 1 分钟 ping 一次 google.com,并将当前日期和时间的输出记录到文件路径。

于 2018-11-19T06:19:24.623 回答