我正在编写一个快速而脏的脚本来检测服务器停机时间。我有一台服务器和两台远程客户端,每秒都会对服务器进行ping操作,看它是否已启动。
如果您运行cron
的最多时间是每分钟一次,我如何将任务设置为在客户端计算机上每秒运行一次?什么是最好的方法来达到上述目的?
此外,客户机可能会重启,程序需要继续运行(类似于cron)。
答案 0 :(得分:3)
while true; do ping -c 1 server | do stuff w/ output;sleep 1;done
要获得“编辑(可能重启)”的资格,只需创建一个init-script即可 再次启动循环。
答案 1 :(得分:2)
我知道你问过ping。还有其他事情需要考虑。
获得“正常运行时间”的更合理方法是使用查询数据库的内容,如wtpmx,utmp或其他文件。 ping协议,ICMP可以被繁忙的系统忽略。错过的回报并不总是意味着系统崩溃。或者系统无法运行。 可能有很多原因。
考虑在现代UNIX机器上实现正常运行时间的一种方法:
ssh remoteserver 'uptime'
还要考虑“为什么”你正在ping。
Ping可用于检查系统是否处于活动状态并响应ping数据包,但可能无法告诉您系统是否实际正在运行。这可能是您想要确定的。例如,数据库服务器或邮件服务器可能有一些挂起的进程。因此它对ping做出响应,但对它的目的很少。您可能希望构建一个比ping更有用的命令。我们每分钟在服务器上登录一次24x7 prod数据库,让它运行一个sql脚本,回复像'OKAY'这样无害的东西。如,
select 'OKAY' from dual;
答案 2 :(得分:0)
您可以编写一个cronjob以在以下脚本的帮助下实现这一目标。
1 * * * * /bin/ping -c2 www.google.com | while read pong; do echo "$(date): $pong"; done >> ~/pings/google.com.log
每隔1分钟ping google.com一次,并将带有当前日期和时间的输出记录到文件路径。