#!/bin/bash
# ============================================================
# gk_manual.sh — 手动追加发文(在线时想加就加)
#
# 与每天 12:00 的自动任务【互不干涉】:
# 1. 记账分开 —— postmeta 写 _gk_auto_src=manual,
# 自动任务只认 auto 的记录,不会把手动的算作它的成果;
# 手动也不看 auto 的账,随时可加。
# 2. 锁分开 —— 自动用 gk_auto.lock,手动用 gk_manual.lock。
# 若手动正跑、自动正跑,两者可以并存(各写各的文章,不冲突)。
# 只有同类任务自己才会互斥,防止重复点造成叠加。
#
# 用法:
# gk_manual.sh # 交互选择每站篇数
# gk_manual.sh --count 2 # 直接指定每站 2 篇
# gk_manual.sh main --count 1 # 只发主站
# ============================================================
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PHP=/www/server/php/74/bin/php
DIR=/root/gk_auto
LOCK=/tmp/gk_manual.lock # ← 与自动任务的锁不同
LOG=/www/wwwlogs/gk_manual.log
{
echo "=================================================="
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 手动发文启动 参数: $*"
} >> "$LOG"
# 只与「手动任务」互斥;自动任务用的是另一把锁,可并行
exec 9>"$LOCK"
if ! flock -n 9; then
echo "[$(date '+%H:%M:%S')] 上一次手动任务仍在运行,本次跳过" >> "$LOG"
exit 0
fi
# 交互模式需要终端;无终端(cron/后台)时自动降级为默认篇数
if [ -t 0 ]; then
"$PHP" "$DIR/gk_auto.php" all --manual "$@" >> "$LOG" 2>&1
else
"$PHP" "$DIR/gk_auto.php" all --manual "$@" >> "$LOG" 2>&1
fi
RC=$?
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 结束,退出码 $RC" >> "$LOG"
exit $RC