个人不喜欢Qexo的Github Action方式,其本地方式又有问题,故在此给大家提供一种思路。

安装Qexo

自行阅读文档。快速开始 | Qexo 文档。以下提供本人自用的Docker run

docker run -d \
    --restart=unless-stopped \
    -v $(pwd)/db:/app/db \
    -v blog目录:/blog \
    -p 127.0.0.1:40001:8000 \
    -e TIMEOUT=600 \
    --name="qexo" \
    abudulin/qexo:latest

其中blog目录设置为你的blog所在目录,端口映射如果你不在意直接暴露端口则可以不用设置监听127.0.0.1,当然我使用反代将80端口反代到40001端口,方便我套CDN,也避免泄露服务器的IP。

在Qexo设置方面,参考如下

image.png

监听文件变动

安装inotify-tools

sudo apt install inotify-tools

找一个目录放监控脚本,我放在/etc/komri/blog/blog_monitor.sh,设置脚本有可执行权限chmod -x /etc/komri/blog/blog_monitor.sh,脚本美容如下

#!/bin/bash

# 监控的目标路径
TARGET="/etc/komari/blog/source"

# 检查目标是否存在
if [ ! -d "$TARGET" ]; then
    echo "错误: 目录 $TARGET 不存在。"
    exit 1
fi

echo "开始监控 $TARGET ..."

# 使用 inotifywait 监控
# --format '%w%f' 输出完整路径
inotifywait -m -r -e modify,create,delete,move --format '%w%f' "$TARGET" | while read FILE
do
    # --- 防抖动逻辑 ---
    # 发现变动后,等待 10 秒,如果期间还有变动,read -t 会继续读取
    while read -t 10 NEXT_FILE; do
        : # 丢弃短时间内的连续事件
    done

    echo "检测到变动:$FILE,正在执行任务..."
  
    # 【在此处替换为你实际要执行的命令】
    # 例如:/usr/bin/rsync -avz /etc/komari/blog/ /backup/blog/
    cd /etc/komari/blog && /usr/local/bin/hexo g && /usr/local/bin/hexo d
  
    echo "任务执行完毕,继续监控..."
done

设置开机自启

创建一个systemd服务,并编辑vim /etc/systemd/system/blog-monitor.service

[Unit]
Description=Inotify Folder Monitor for Komari Blog
After=network.target

[Service]
# 因为要监控 /etc 目录,通常需要 root 权限
User=root
Group=root

# 执行脚本的路径
ExecStart=/usr/local/bin/blog_monitor.sh

# 崩溃自动重启设置
# Restart=always 表示无论退出状态码是多少都会重启
Restart=always
# 重启前的等待时间
RestartSec=5s

# 限制日志输出大小(可选)
StandardOutput=journal
StandardError=journal

[Install]
# 设置开机自启
WantedBy=multi-user.target

重启systemd并设置开启自启

sudo systemctl daemon-reload
sudo systemctl enable blog-monitor.service
sudo systemctl start blog-monitor.service

这样就能监控是否创建了新的文章,如果修改了主题文件,则自己去blog文件夹下重新执行一遍hexo clean && hexo g && hexo d