应优先使用ping或telnet等系统自带命令定时探测服务器在线状态,配合cron每5分钟执行一次,记录时间、目标、状态及耗时,连续失败2次触发邮件或webhook提醒,脚本需参数化、带错误详情输出且不依赖复杂环境。
用脚本自动检查服务器是否在线,核心是定时发起网络探测并记录结果,关键在于简单可靠、便于排查、不依赖复杂服务。
选择轻量探测方式
避免启动完整 HTTP 请求或依赖浏览器环境。推荐使用 ping 或 telnet(检查端口)这类系统自带命令:
- 对 Web 服务,可用
curl -I --connect-timeout 5 http://example.com获取响应头,比完整加载快 - 对数据库或 API 端口,直接用
nc -zv host port 测试连通性 - 避免用
wget下载整个页面,容易因超时或重定向失败误判
用 cron 实现定期执行
Linux 下最稳妥的定时方案是 cron,无需额外进程管理:
- 编辑用户 crontab:
crontab -e - 添加一行如:
*/5 * * * * /path/to/check.sh >> /var/log/server-check.log 2>&1(每 5 分钟运行一次) - 注意脚本路径写绝对路径,环境变量可能与交互式终端不同,必要时在脚本开头显式设置 PATH
记录与异常提醒
只打印日志不够,需明确区分正常与异常,并触发通知:
- 每次检查记录时间、目标、状态(OK/FAIL)、耗时,例如:
[2024-04-10 14:22] api.example.com: OK (32ms) - 连续失败 2 次再发提醒,避免瞬时抖动误报;可用临时文件记录失败次数
- 提醒方式选最易到达的:发邮件(
mail命令)、推送企业微信/钉钉(调用 webhook)、或写入指定文件供其他监控系统读取
保持脚本可维护
把目标地址、超时时间、重试次数等参数抽出来,不要硬编码:
- 用配置文件(如
config.ini)或环境变量控制行为 - 脚本开头加简单校验:检查命令是否存在、配置文件是否可读
- 失败时输出具体原因(如 “timeout”、“connection refused”、“no route to host”),方便快速定位是网络、防火墙还是服务宕机
不需要部署独立服务,也不必引入 Python 或 Node.js 运行时——一个几十行的 shell 脚本配合 cron 就能稳定跑半年以上。











