运营一个博客,要做的事情很多:写文章、发布、检查收录、监控流量、定期备份……如果全靠手动,时间都被琐事占满了。
本文分享5个我常用的自动化脚本,帮你把重复劳动交给机器,把时间留给创作。
一、为什么需要自动化?
手动运营的痛点:
- 发布文章要登录后台、上传图片、设置标签
- 检查收录要一个个网站去查
- 备份容易忘记
- 数据统计要手动记录
自动化带来的价值:
- 节省时间(每天至少30分钟)
- 减少出错(机器比人可靠)
- 数据积累(自动记录历史数据)
- 规模化(一个脚本管理多个站点)
二、脚本1:自动构建发布
功能: 一键构建并部署Hugo博客
#!/bin/bash
# 文件名: deploy.sh
# 用法: ./deploy.sh
BLOG_DIR="/var/www/blog"
LOG_FILE="/var/log/blog-deploy.log"
echo "========== $(date '+%Y-%m-%d %H:%M:%S') ==========" >> "$LOG_FILE"
cd "$BLOG_DIR"
# 拉取最新内容(如果有远程仓库)
git pull origin main 2>/dev/null
# 构建站点
hugo --gc --minify >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "✅ 构建成功" | tee -a "$LOG_FILE"
# 重载Nginx
systemctl reload nginx
# 可选:同步到CDN
# rsync -avz public/ user@cdn:/var/www/blog/
else
echo "❌ 构建失败,查看日志: $LOG_FILE" | tee -a "$LOG_FILE"
fi
使用方法:
chmod +x deploy.sh
./deploy.sh
进阶用法: 配合Git Hook实现推送自动部署
三、脚本2:新文章模板生成器
功能: 快速创建符合SEO规范的文章模板
#!/bin/bash
# 文件名: new_post.sh
# 用法: ./new_post.sh "文章标题" "分类" "标签1,标签2"
BLOG_DIR="/var/www/blog"
TITLE="$1"
CATEGORY="$2"
TAGS="$3"
if [ -z "$TITLE" ]; then
echo "用法: $0 \"文章标题\" \"分类\" \"标签1,标签2\""
exit 1
fi
# 生成文件名(简化处理)
SLUG=$(echo "$TITLE" | sed 's/ /-/g' | tr '[:upper:]' '[:lower:]')
DATE=$(date '+%Y-%m-%dT%H:%M:%S+08:00')
TODAY=$(date '+%Y-%m-%d')
# 创建文章
cat > "$BLOG_DIR/content/posts/${TODAY}-${SLUG}.md" << EOF
---
title: "$TITLE"
date: $DATE
draft: true
tags: [$(echo "$TAGS" | sed 's/,/, /g')]
categories: ["$CATEGORY"]
description: ""
---
## 引言
<!-- 在这里写引言,50-100字,包含关键词 -->
## 正文
<!-- 正文内容 -->
## 总结
<!-- 总结部分 -->
---
**相关阅读:**
- [相关文章1](/posts/xxx)
- [相关文章2](/posts/xxx)
EOF
echo "✅ 文章已创建: content/posts/${TODAY}-${SLUG}.md"
echo "📝 请编辑文章内容,完成后将 draft: true 改为 draft: false"
使用方法:
chmod +x new_post.sh
./new_post.sh "我的新文章" "科技观察" "AI,工具"
四、脚本3:收录监控
功能: 检查搜索引擎收录情况
#!/bin/bash
# 文件名: check_index.sh
# 用法: ./check_index.sh yourdomain.com
DOMAIN="$1"
if [ -z "$DOMAIN" ]; then
echo "用法: $0 yourdomain.com"
exit 1
fi
echo "========== 收录检查 $(date '+%Y-%m-%d %H:%M') =========="
echo ""
# Google收录
echo "🔍 Google收录:"
GOOGLE_COUNT=$(curl -s "https://www.google.com/search?q=site:$DOMAIN" \
-H "User-Agent: Mozilla/5.0" | grep -oP '约 \K[\d,]+|resultStats">\K[\d,]+' \
| head -1 | tr -d ',')
if [ -n "$GOOGLE_COUNT" ]; then
echo " $GOOGLE_COUNT 页"
else
echo " 未收录或查询失败"
fi
# 百度收录
echo ""
echo "🔍 百度收录:"
BAIDU_COUNT=$(curl -s "https://www.baidu.com/s?wd=site:$DOMAIN" \
-H "User-Agent: Mozilla/5.0" | grep -oP '找到相关结果数约(\K[\d,]+)' \
| head -1 | tr -d ',')
if [ -n "$BAIDU_COUNT" ]; then
echo " $BAIDU_COUNT 页"
else
echo " 未收录或查询失败"
fi
# 必应收录
echo ""
echo "🔍 必应收录:"
BING_COUNT=$(curl -s "https://www.bing.com/search?q=site:$DOMAIN" \
-H "User-Agent: Mozilla/5.0" | grep -oP '<span class="sb_count"[^>]*>\K[\d,]+' \
| head -1 | tr -d ',')
if [ -n "$BING_COUNT" ]; then
echo " $BING_COUNT 页"
else
echo " 未收录或查询失败"
fi
echo ""
echo "================================"
定时执行: 每周一自动检查并发送报告
五、脚本4:自动备份
功能: 定期备份网站内容和数据库
#!/bin/bash
# 文件名: backup.sh
# 用法: ./backup.sh
BLOG_DIR="/var/www/blog"
BACKUP_DIR="/var/backup/blog"
DATE=$(date '+%Y%m%d')
KEEP_DAYS=30
mkdir -p "$BACKUP_DIR"
# 备份内容
echo "📦 正在备份..."
tar -czf "$BACKUP_DIR/blog_content_$DATE.tar.gz" \
-C "$BLOG_DIR" content/ static/ hugo.yaml layouts/
# 备份数据库(如果有)
# mysqldump -u user -p database > "$BACKUP_DIR/db_$DATE.sql"
# 清理旧备份
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$KEEP_DAYS -delete
# 计算备份大小
SIZE=$(du -h "$BACKUP_DIR/blog_content_$DATE.tar.gz" | cut -f1)
echo "✅ 备份完成: $BACKUP_DIR/blog_content_$DATE.tar.gz ($SIZE)"
echo "📁 保留最近 $KEEP_DAYS 天的备份"
# 可选:上传到云存储
# rclone copy "$BACKUP_DIR/blog_content_$DATE.tar.gz" remote:backup/
定时执行: 每天凌晨3点自动备份
# 添加到crontab
0 3 * * * /var/www/blog/scripts/backup.sh >> /var/log/blog-backup.log 2>&1
六、脚本5:流量统计报告
功能: 生成简单的流量统计报告
#!/bin/bash
# 文件名: traffic_report.sh
# 用法: ./traffic_report.sh
LOG_FILE="/var/log/nginx/blog.access.log"
REPORT_FILE="/var/www/blog/reports/traffic_$(date '+%Y%m%d').txt"
mkdir -p "$(dirname "$REPORT_FILE")"
echo "========== 流量报告 $(date '+%Y-%m-%d') ==========" > "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 今日访问量
TODAY_HITS=$(grep "$(date '+%d/%b/%Y')" "$LOG_FILE" | wc -l)
TODAY_IPS=$(grep "$(date '+%d/%b/%Y')" "$LOG_FILE" | awk '{print $1}' | sort -u | wc -l)
echo "📊 今日统计" >> "$REPORT_FILE"
echo " 访问量: $TODAY_HITS" >> "$REPORT_FILE"
echo " 独立IP: $TODAY_IPS" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 热门页面
echo "📄 热门页面 (Top 10)" >> "$REPORT_FILE"
grep "$(date '+%d/%b/%Y')" "$LOG_FILE" | \
awk '{print $7}' | \
sort | uniq -c | sort -rn | head -10 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 访问来源
echo "🔗 访问来源 (Top 5)" >> "$REPORT_FILE"
grep "$(date '+%d/%b/%Y')" "$LOG_FILE" | \
awk -F'"' '{print $4}' | \
grep -v "^-$" | \
grep -v "^https\?://[^/]*yourdomain.com" | \
sort | uniq -c | sort -rn | head -5 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "完整日志: $LOG_FILE" >> "$REPORT_FILE"
cat "$REPORT_FILE"
七、定时任务配置
将以上脚本配置为定时任务:
# 编辑crontab
crontab -e
# 添加以下内容
# 每天凌晨3点备份
0 3 * * * /var/www/blog/scripts/backup.sh >> /var/log/blog-backup.log 2>&1
# 每周一检查收录
0 9 * * 1 /var/www/blog/scripts/check_index.sh yourdomain.com
# 每天生成流量报告
0 8 * * * /var/www/blog/scripts/traffic_report.sh
八、进阶建议
1. 使用GitHub Actions
如果你的博客托管在GitHub,可以用Actions实现CI/CD:
# .github/workflows/deploy.yml
name: Deploy Blog
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
- name: Build
run: hugo --gc --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
2. 接入监控告警
- 使用Uptime Robot监控网站可用性
- 配置邮件/钉钉告警
- 异常时自动通知
3. 数据可视化
- 使用Grafana展示流量数据
- 对比不同时期的数据变化
写在最后
自动化的目的是把重复劳动交给机器,让创作者专注内容。
以上5个脚本只是起点,你可以根据自己的需求扩展更多功能。关键是:识别重复任务 → 编写脚本 → 配置定时执行。
记住:工具服务于人,不要为了自动化而自动化。
你有哪些自动化运营的心得?欢迎分享。
