那么,我在办公室里的一组服务器上做了类似的事情。我发现运行良好的概述仅仅是运行一个cron脚本,可以将每个其他服务器的状态保存在一个临时状态文件中,并通过调用ping来更新状态。
具体来说,该例程的工作原理是维护包含在检查中的主机列表。每个主机(与运行cron作业的计算机名称匹配的名称除外)的状态文件都保存在名为hoststatus.$HOSTNAME
的/ tmp目录中。每个状态文件包含up
或down
。 (如果状态文件不存在,则在检查过程中创建并假定)。状态文件本身提供了一种本地方式,用于在运行任何脚本之前检查每个远程主机的状态。
检查状态的cron作业,读取每个远程主机的状态文件并将状态提供给case
语句。对于状态为up
的case
,使用ping -c1 hostname
拨打远程主机。如果ping成功,则脚本退出(远程主机已启动)。如果ping失败,则脚本等待20秒(以确保远程不重新启动等),然后再次检查;如果第二次调用成功,则状态为up
,脚本退出;如果第二次ping命令失败,如果第三次测试失败,则状态文件被写入down
,并且远程主机被视为关闭。
继续在case语句中,如果初始状态为down
,则简单如果成功,则状态变为up
,如果失败,则保持down
。
还保留了一个日志文件,它反映了每次状态变化以提供s的运行历史记录erver可用性。
类似的东西会适用于你的情况。如果服务器A
出现故障,则服务器B
可能会以类似的方式写入简单日志,如在A->B
或B->A
之间运行rsync之前检查的rsynchold.hostA
。这将允许您在发生故障后使用第一台rsync进行手动干预 - 此时您可以重置rsynchold.hostA
文件。
这并不高雅,但在过去几年已被证明是十分简单的。
谢谢你,案例的想法,我认为是我正在寻找,因为我一直在思考,如果A只是重新启动或由于某种原因ping回来消极,我不希望rsync停止,你的20秒的想法是好的,我会尝试并让你知道。 –