#!/bin/bash # 管理定时任务 set -e read -r input ACTION=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('action',''))" 2>/dev/null) NAME=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('name',''))" 2>/dev/null) CMD=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('command',''))" 2>/dev/null) INTERVAL=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('interval_seconds',3600))" 2>/dev/null) DESC=$(echo "$input" | python3 -c "import sys,json; print(json.load(sys.stdin).get('description',''))" 2>/dev/null) DB_URL="${DATABASE_URL}" if [ -z "$DB_URL" ]; then echo "数据库未配置(DATABASE_URL)" exit 1 fi case "$ACTION" in add) if [ -z "$CMD" ]; then echo "add 操作需要 command 参数" exit 1 fi psql "$DB_URL" -c " INSERT INTO scheduled_tasks (id, name, description, command, interval_seconds, enabled, next_run_at) VALUES (gen_random_uuid(), '$NAME', '$DESC', '$CMD', $INTERVAL, true, NOW() + interval '$INTERVAL seconds') ON CONFLICT (name) DO UPDATE SET command = EXCLUDED.command, interval_seconds = EXCLUDED.interval_seconds, enabled = true, description = EXCLUDED.description " 2>/dev/null && echo "✅ 已添加/更新定时任务: $NAME" || echo "❌ 添加失败(表 scheduled_tasks 可能未创建)" ;; delete) psql "$DB_URL" -c "DELETE FROM scheduled_tasks WHERE name = '$NAME'" 2>/dev/null echo "✅ 已删除定时任务: $NAME" ;; enable) psql "$DB_URL" -c "UPDATE scheduled_tasks SET enabled = true WHERE name = '$NAME'" 2>/dev/null echo "✅ 已启用定时任务: $NAME" ;; disable) psql "$DB_URL" -c "UPDATE scheduled_tasks SET enabled = false WHERE name = '$NAME'" 2>/dev/null echo "✅ 已禁用定时任务: $NAME" ;; *) echo "未知操作: $ACTION(支持: add, delete, enable, disable)" exit 1 ;; esac