畅捷通定时任务配置与Cron自动化运维指南

概述

畅捷通集成系统采用"CLI脚本 + Cron定时 + Web手动触发"的混合运维模式。sync_all.php 支持一键全量同步,各独立脚本支持单独执行,resend_appTicket.php 提供 Ticket 手动补推能力。本文详解部署环境配置、定时策略设计、日志监控和异常恢复方案。

graph TB


一、服务端部署架构

1.1 目录结构

/var/www/chanjet/                    # 部署根目录
├── config.json                      # 凭证和数据库配置
├── appTicket.php                    # Ticket接收端点
├── fetch_token.php                  # Token获取脚本
├── resend_appTicket.php             # Ticket补推工具
├── get_token.php                    # Web Token管理器
├── sync_all.php                     # 一键全量同步
├── sync_helper.php                  # 通用函数库
├── sync_warehouse.php               # 仓库同步
├── sync_employee.php                # 员工同步
├── sync_partner.php                 # 往来单位同步
├── sync_inventory.php               # 存货同步
├── sync_inventory_class.php         # 存货分类同步
├── sync_bom.php                     # BOM同步
├── db_view.php                      # 数据查看工具
├── test_purchase.php                # 采购订单测试
├── HaoTong.php                      # 审批流插件
├── connector/                       # 低代码编排平台
└── appTicket.txt                    # Ticket文件(运行时生成)

1.2 Nginx 配置要点

server {
    listen 20080;
    server_name _;
    root /var/www/chanjet;
  
    location /chanjet/ {
        # 关键:appTicket.php 必须能接收外部POST请求
    }
  
    location /chanjet/appTicket.php {
        # 畅捷通平台回调地址,需公网可达
    }
}

sequenceDiagram


二、Cron 定时任务配置

2.1 推荐 Cron 配置

# 编辑 crontab
crontab -e

# ============================================
# 畅捷通 T+ 数据同步定时任务
# ============================================

# 1. 每日凌晨2点 — 全量同步所有基础档案
0 2 * * * /usr/bin/curl -s http://127.0.0.1:20080/chanjet/sync_all.php >> /var/log/chanjet/sync_$(date +\%Y\%m\%d).log 2>&1

# 2. 每5天凌晨3点 — 刷新Token(6天有效期,留1天buffer)
0 3 */5 * * /usr/bin/php /var/www/chanjet/fetch_token.php >> /var/log/chanjet/token_$(date +\%Y\%m\%d).log 2>&1

# 3. 每周一凌晨4点 — 补推appTicket
0 4 * * 1 /usr/bin/php /var/www/chanjet/resend_appTicket.php >> /var/log/chanjet/ticket_$(date +\%Y\%m\%d).log 2>&1

# 4. 每6小时 — 存货增量同步(可选,数据变化频繁时启用)
# 0 */6 * * * /usr/bin/curl -s http://127.0.0.1:20080/chanjet/sync_inventory.php >> /var/log/chanjet/inventory_$(date +\%Y\%m\%d).log 2>&1

2.2 Cron 时间策略分析

任务Cron表达式频率原因
全量同步 0 2 * * * 每天 凌晨业务低峰期
Token刷新 0 3 */5 * * 每5天 Token有效期6天
Ticket补推 0 4 * * 1 每周 Ticket 30分钟有效但仅需确保通路
日志清理 0 5 * * 0 每周 清理30天前日志

gantt


三、sync_all.php 执行策略

3.1 顺序执行机制

// sync_all.php 第19-59行
// 严格按顺序执行,先轻后重
try { $results['warehouse'] = syncWarehouse(); }       // ① 仓库(18条)
catch (Exception $e) { /* 失败不中断 */ }

try { $results['employee'] = syncEmployee(); }         // ② 员工(48条)
catch (Exception $e) { /* 失败不中断 */ }

try { $results['partner'] = syncPartner(); }           // ③ 往来单位(100条)
catch (Exception $e) { /* 失败不中断 */ }

try { $results['inventory'] = syncInventory(); }       // ④ 存货(7989条)
catch (Exception $e) { /* 失败不中断 */ }

try { $results['inventory_class'] = syncInventoryClass(); } // ⑤ 分类(671条)
catch (Exception $e) { /* 失败不中断 */ }

try { $results['bom'] = syncBom(); }                   // ⑥ BOM(95条)
catch (Exception $e) { /* 失败不中断 */ }

设计哲学:每个模块独立 try/catch,一个失败不影响其他。汇总返回各模块的成功/失败状态。

3.2 执行反馈格式

成功响应:

{
    "success": true,
    "time": "2025-06-18 02:00:15",
    "total": 8921,
    "results": {
        "warehouse": {"success": true, "count": 18},
        "employee": {"success": true, "count": 48},
        "partner": {"success": true, "count": 100},
        "inventory": {"success": true, "count": 7989},
        "inventory_class": {"success": true, "count": 671},
        "bom": {"success": true, "count": 95}
    }
}

部分失败:

{
    "success": false,
    "time": "2025-06-18 02:05:30",
    "total": 8020,
    "results": {
        "warehouse": {"success": true, "count": 18},
        "employee": {"success": true, "count": 48},
        "partner": {"success": true, "count": 100},
        "inventory": {"success": false, "message": "cURL error: timeout", "count": 0},
        "inventory_class": {"success": true, "count": 671},
        "bom": {"success": true, "count": 95}
    }
}

四、手动运维操作

4.1 快速数据校验

# 查看所有表的数据统计
curl http://127.0.0.1:20080/chanjet/db_view.php

# 查看存货表前50条
curl "http://127.0.0.1:20080/chanjet/db_view.php?t=tplus_inventory"

# 查看BOM表第3页
curl "http://127.0.0.1:20080/chanjet/db_view.php?t=tplus_bom&p=3"

4.2 Token 手动刷新

# 当Token过期时手动刷新
php /var/www/chanjet/fetch_token.php

# 或通过Web界面
# 浏览器访问: http://127.0.0.1:20080/chanjet/get_token.php

4.3 appTicket 补推

# appTicket接收异常时手动触发
php /var/www/chanjet/resend_appTicket.php

# 或浏览器访问Web界面
# http://127.0.0.1:20080/chanjet/resend_appTicket.php

4.4 单个模块重新同步

# 仅同步存货(大表,独立执行更快)
curl http://127.0.0.1:20080/chanjet/sync_inventory.php

# 仅同步BOM
curl http://127.0.0.1:20080/chanjet/sync_bom.php

五、日志管理

5.1 日志路径规划

/var/log/chanjet/
├── sync_20250618.log      # 每日同步日志
├── token_20250618.log      # Token刷新日志
├── ticket_20250618.log     # Ticket推送日志
└── archive/                # 历史归档

5.2 日志清理 Cron

# 每周日清理30天前的日志
0 5 * * 0 find /var/log/chanjet/ -name "*.log" -mtime +30 -delete

5.3 异常检测脚本

#!/bin/bash
# check_sync.sh - 检测同步是否成功

LOG_FILE="/var/log/chanjet/sync_$(date +%Y%m%d).log"

if ! grep -q '"success":true' "$LOG_FILE"; then
    echo "⚠ 畅捷通同步失败!" | mail -s "同步告警" admin@example.com
fi

六、故障恢复流程

flowchart TD


七、监控告警配置建议

# 钉钉/企业微信 Webhook 告警(示例)
# 在 sync_all.php 执行后调用

WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"

if [ "$SYNC_SUCCESS" != "true" ]; then
    curl -H "Content-Type: application/json" \
         -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"⚠ 畅捷通同步失败!时间:$(date)\"}}" \
         "$WEBHOOK_URL"
fi

八、运维检查清单

频率检查项方法
每日 同步日志中"success":true grep success /var/log/chanjet/sync_*.log
每日 各表数据量是否在合理范围 db_view.php 首页查看
每周 Token 是否在有效期内 get_token.php Web界面查看
每周 appTicket 接收端点是否可达 curl -I appTicket.php
每月 日志文件磁盘占用 du -sh /var/log/chanjet/
posted @ 2026-06-19 15:37  chenheoa  阅读(0)  评论(0)    收藏  举报