在使用前,请务必修改以下文件中的用户名和路径:
-
ip_monitor.service- 将your-user-name替换为你的实际用户名User=your-user-name→User=你的用户名/home/your-user-name/ip-monitor→/home/你的用户名/ip-monitor
-
ip_monitor.timer- 如果路径不同,也需要相应修改 -
crontab 配置 - 如果使用 crontab 方式,请修改脚本路径
- 每20分钟自动检测公网IP变化
- IP变化时立即发送飞书通知
- 每天晚上10点自动发送服务器状态报告(IP地址和服务器状态)
- 自动记录IP变化日志
- 支持飞书Webhook机器人通知
ip_monitor.sh- 主监控脚本(支持IP检查和每日报告)install.sh- 一键安装脚本(推荐使用)ip_monitor.service.example- IP监控服务配置示例ip_monitor.timer.example- IP监控定时器配置示例ip_monitor_daily.service.example- 每日报告服务配置示例ip_monitor_daily.timer.example- 每日报告定时器配置示例.ip_monitor_config- 配置文件(包含飞书Webhook URL,安装时自动生成).current_ip- 当前IP记录文件(自动生成).last_report_date- 最后报告日期记录(自动生成)ip_monitor.log- 监控日志文件(自动生成)
使用一键安装脚本,会自动配置所有服务:
bash install.sh安装脚本会:
- 询问用户名和安装路径
- 配置飞书Webhook URL
- 自动创建配置文件
- 安装并启动所有systemd服务
# 0. 创建配置文件(包含飞书Webhook URL)
cat > .ip_monitor_config <<EOF
FEISHU_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-id"
EOF
chmod 600 .ip_monitor_config
# 1. 从example文件创建实际配置文件,修改用户名和路径
sed "s|your-user-name|你的用户名|g" ip_monitor.service.example | \
sed "s|/home/your-user-name/ip-monitor|$(pwd)|g" > ip_monitor.service
cp ip_monitor.timer.example ip_monitor.timer
sed "s|your-user-name|你的用户名|g" ip_monitor_daily.service.example | \
sed "s|/home/your-user-name/ip-monitor|$(pwd)|g" > ip_monitor_daily.service
cp ip_monitor_daily.timer.example ip_monitor_daily.timer
# 2. 复制服务文件到系统目录
sudo cp ip_monitor.service /etc/systemd/system/
sudo cp ip_monitor.timer /etc/systemd/system/
sudo cp ip_monitor_daily.service /etc/systemd/system/
sudo cp ip_monitor_daily.timer /etc/systemd/system/
# 3. 重新加载systemd配置
sudo systemctl daemon-reload
# 4. 启用并启动定时器
sudo systemctl enable ip_monitor.timer
sudo systemctl enable ip_monitor_daily.timer
sudo systemctl start ip_monitor.timer
sudo systemctl start ip_monitor_daily.timer
# 5. 检查状态
sudo systemctl status ip_monitor.timer
sudo systemctl status ip_monitor_daily.timer
sudo systemctl list-timers | grep ip_monitor/path/to/ip-monitor 替换为实际的脚本路径!
# 编辑crontab
crontab -e
# 添加以下行(每20分钟执行一次,请修改为实际路径)
# 例如:*/20 * * * * /home/your-username/ip-monitor/ip_monitor.sh
*/20 * * * * /path/to/ip-monitor/ip_monitor.sh# 查看监控日志
tail -f ip_monitor.log
# 查看最近的日志
tail -20 ip_monitor.log# 正常IP检查
bash ip_monitor.sh
# 发送测试消息(验证Webhook配置)
bash ip_monitor.sh --test
# 或
bash ip_monitor.sh -t
# 执行每日报告
bash ip_monitor.sh --daily-report
# 查看帮助
bash ip_monitor.sh --helpcat .current_ip# 查看定时器状态
sudo systemctl status ip_monitor.timer
# 查看下次执行时间
sudo systemctl list-timers | grep ip_monitor
# 查看服务日志
sudo journalctl -u ip_monitor.service -fsudo systemctl stop ip_monitor.timer
sudo systemctl disable ip_monitor.timercrontab -e
# 删除或注释掉相关行安装完成后,建议先测试Webhook是否配置正确:
# 发送测试消息
bash ip_monitor.sh --test
# 或
bash ip_monitor.sh -t如果配置正确,你应该能在飞书群聊中收到一条测试消息,包含:
- 当前公网IP
- 服务器状态(CPU、内存、磁盘、负载)
- 测试时间
如果需要添加邮件、webhook等通知方式,可以编辑 ip_monitor.sh 文件中的 send_feishu_message 函数,或添加新的通知函数。
# 示例:发送邮件(需要配置mail命令)
echo "IP变化: $previous_ip -> $current_ip" | mail -s "IP变化通知" your@email.com
# 示例:发送webhook
curl -X POST https://your-webhook-url.com \
-H "Content-Type: application/json" \
-d "{\"ip\": \"$current_ip\", \"previous_ip\": \"$previous_ip\"}"
# 示例:桌面通知(需要安装notify-send)
notify-send "IP变化通知" "IP已从 $previous_ip 变更为 $current_ip"- 脚本需要网络连接才能获取IP
- 如果无法获取IP,会记录警告但不会中断运行
- 每天只报告一次IP变化,即使一天内多次变化
- 日志文件会持续增长,建议定期清理或配置日志轮转