#!/bin/bash # ========================================== # DataX 增量同步定时任务配置脚本 # 适用系统: Rocky Linux 9 / CentOS / RHEL # 功能: 添加每10分钟执行一次的 crontab 任务 # ========================================== # 1. 基础配置 # 假设您将整个文件夹上传到了 /usr/local/datax WORK_DIR="/usr/local/datax" SCRIPT_NAME="run_jobs_inc.sh" SCRIPT_PATH="$WORK_DIR/$SCRIPT_NAME" # 日志存放位置,建议单独放在 logs 目录 LOG_FILE="$WORK_DIR/logs/datax_inc_cron.log" # 2. 检查环境 echo "正在检查环境..." # 检查工作目录 if [ ! -d "$WORK_DIR" ]; then echo "错误: 工作目录 $WORK_DIR 不存在" echo "请先将 DataX 配置相关文件上传至服务器的 $WORK_DIR" exit 1 fi # 检查脚本是否存在 if [ ! -f "$SCRIPT_PATH" ]; then echo "错误: 执行脚本 $SCRIPT_PATH 不存在" echo "请确保 $SCRIPT_NAME 位于 $WORK_DIR 目录下" exit 1 fi # 创建日志目录 if [ ! -d "$(dirname "$LOG_FILE")" ]; then mkdir -p "$(dirname "$LOG_FILE")" echo "创建日志目录: $(dirname "$LOG_FILE")" fi # 3. 赋予执行权限 echo "正在赋予脚本执行权限..." chmod +x "$SCRIPT_PATH" # 4. 配置 Crontab # 任务定义: 每10分钟执行一次 (*/10) # >> $LOG_FILE 2>&1 : 将标准输出和错误输出都追加写入日志文件 CRON_CMD="*/10 * * * * /bin/bash $SCRIPT_PATH >> $LOG_FILE 2>&1" # 检查任务是否已存在 (避免重复添加) # 使用 grep 查找包含脚本路径的行 EXISTING_JOB=$(crontab -l 2>/dev/null | grep "$SCRIPT_PATH") if [ -n "$EXISTING_JOB" ]; then echo "警告: 检测到该脚本的定时任务已存在:" echo " $EXISTING_JOB" echo "----------------------------------------" read -p "是否先删除旧任务再重新添加? (y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "已取消操作,未修改 Crontab。" exit 0 fi # 移除旧任务 (通过 grep -v 反向过滤掉包含脚本路径的行) # 注意: 这会保留其他不相关的定时任务 crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH" | crontab - echo "旧任务已移除" fi # 添加新任务 # (crontab -l; echo "new job") | crontab - 这种写法可以保留原有任务并追加新任务 (crontab -l 2>/dev/null; echo "$CRON_CMD") | crontab - # 5. 验证与提示 echo "----------------------------------------" echo "✅ 定时任务设置成功!" echo "----------------------------------------" echo "当前用户的 Crontab 列表:" crontab -l echo "----------------------------------------" echo "执行策略: 每10分钟执行一次" echo "日志文件: $LOG_FILE" echo "----------------------------------------" echo "提示: 请确保 crond 服务正在运行" echo "检查命令: systemctl status crond" echo "启动命令: systemctl start crond"