运维工程师如何用Shell脚本自动生成日报:从history到企业微信推送
前言
写日报是大多数公司的硬性要求,但对于运维工程师来说,一天处理的事情又杂又多,到了下班时间根本想不起来干了啥。本文分享一套实用的日报自动化方案,将日报撰写时间从30分钟压缩到5分钟。
问题分析
运维日报的痛点:
- 一天处理几十个事务,下班时记不住
- 手动整理耗时,容易遗漏
- 格式每天重复,纯体力劳动
方案一:history命令回溯操作记录
基础用法
# 查看今天所有操作记录
history | grep "$(date +%Y-%m-%d)"
进阶:提取关键操作
#!/bin/bash
# daily_ops.sh - 提取今日关键操作
echo "=== $(date +%Y-%m-%d) 操作回顾 ==="
# 过滤无意义命令(ls, cd, cat等)
history | grep "$(date +%Y-%m-%d)" | \
grep -vE "^[0-9]+\s+(ls|cd|cat|clear|pwd|exit|history)" | \
awk '{$1=""; print NR". "$0}'
多服务器汇总
# 从多台服务器收集操作记录
for host in server1 server2 server3; do
echo "--- $host ---"
ssh $host "history | tail -50" 2>/dev/null
done
方案二:浏览器历史辅助回忆
Chrome地址栏输入 chrome://history,按时间线回顾:
- 查了哪些文档/Wiki
- 处理了哪些工单(Jira/禅道等)
- 查阅了哪些技术资料
命令行方式提取Chrome历史:
# macOS
sqlite3 ~/Library/Application\ Support/Google/Chrome/Default/History \
"SELECT datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime'), url, title
FROM urls
WHERE date(last_visit_time/1000000-11644473600,'unixepoch','localtime') = date('now')
ORDER BY last_visit_time DESC;"
方案三:日报模板 + 快捷短语
固定模板
【今日完成】
1.
2.
3.
【明日计划】
1.
【需要协调】
无
输入法快捷短语
将上述模板设置为输入法快捷短语:
- 搜狗输入法:设置 → 高级 → 自定义短语 → 添加
rb触发 - 微软输入法:设置 → 用户自定义短语
输入 rb 直接弹出完整模板,只需填写内容。
方案四:Shell脚本自动生成日报
完整脚本
#!/bin/bash
# auto_daily_report.sh
# 自动汇总今日工作并生成日报
DATE=$(date +%Y-%m-%d)
REPORT_FILE="/tmp/daily_report_${DATE}.md"
cat > "$REPORT_FILE" << EOF
# 工作日报 - ${DATE}
## 今日完成
### 服务器操作
$(history | grep "$DATE" | grep -vE "(ls|cd|cat|clear|pwd)" | tail -10 | awk '{$1=""; print "- "$0}')
### Git提交记录
$(git log --oneline --since="$DATE 00:00" --until="$DATE 23:59" 2>/dev/null | awk '{print "- "$0}')
### 系统巡检
- CPU最高使用率: $(top -bn1 | grep "Cpu" | awk '{print $2}')%
- 内存使用率: $(free -m | awk 'NR==2{printf "%.1f%%", $3*100/$2}')
- 磁盘使用率: $(df -h / | awk 'NR==2{print $5}')
## 明日计划
1.
## 需要协调
无
EOF
echo "日报已生成: $REPORT_FILE"
cat "$REPORT_FILE"
定时执行 + 推送
# crontab 每天17:50自动生成日报
50 17 * * 1-5 /home/user/auto_daily_report.sh
# 通过企业微信机器人推送
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" \
-H 'Content-Type: application/json' \
-d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$(cat $REPORT_FILE)\"}}"
总结
| 方案 | 适用场景 | 耗时 |
|---|---|---|
| history回溯 | 命令行操作为主 | 3分钟 |
| 浏览器历史 | Web工单为主 | 5分钟 |
| 模板快捷短语 | 通用场景 | 2分钟 |
| Shell自动生成 | 全自动化 | 0分钟 |
从30分钟到5分钟,再到全自动,日报不再是负担。