87 lines
2.8 KiB
Bash
87 lines
2.8 KiB
Bash
#!/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"
|