← 返回列表 gk_manual.sh 1.8 KB · 2026-11-06 10:19
#!/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