55 lines
1.7 KiB
Bash
55 lines
1.7 KiB
Bash
#!/bin/bash
|
|
TARGET=$1
|
|
|
|
if [ -z "$TARGET" ]; then
|
|
echo "用法: $0 <target>"
|
|
echo "请指定同步目标:"
|
|
echo " doris - 启动 Doris 增量同步定时任务"
|
|
echo " mysql - 启动 MySQL 增量同步定时任务"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$TARGET" != "doris" ] && [ "$TARGET" != "mysql" ]; then
|
|
echo "错误: 请指定目标 (doris 或 mysql)"
|
|
exit 1
|
|
fi
|
|
|
|
WORK_DIR="/usr/local/datax"
|
|
SCRIPT_NAME="run_jobs_inc.sh"
|
|
SCRIPT_PATH="$WORK_DIR/$SCRIPT_NAME"
|
|
LOG_FILE="$WORK_DIR/logs/datax_inc_${TARGET}_cron.log"
|
|
|
|
export PATH=$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
|
|
[ -f /etc/profile ] && . /etc/profile
|
|
[ -f ~/.bash_profile ] && . ~/.bash_profile
|
|
[ -f ~/.profile ] && . ~/.profile
|
|
|
|
echo "正在检查环境..."
|
|
if [ ! -d "$WORK_DIR" ]; then
|
|
echo "错误: 工作目录 $WORK_DIR 不存在"; exit 1
|
|
fi
|
|
if [ ! -f "$SCRIPT_PATH" ]; then
|
|
echo "错误: 执行脚本 $SCRIPT_PATH 不存在"; exit 1
|
|
fi
|
|
if [ ! -d "$(dirname "$LOG_FILE")" ]; then
|
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
fi
|
|
|
|
chmod +x "$SCRIPT_PATH"
|
|
# 构造 cron 命令,注意转义和参数传递
|
|
# 修改为每 5 秒运行一次 (通过循环实现,因为 crontab 最小粒度是分钟)
|
|
CRON_CMD="* * * * * for i in {1..12}; do /bin/bash $SCRIPT_PATH $TARGET >> $LOG_FILE 2>&1; sleep 5; done"
|
|
|
|
# 查找已存在的任务 (匹配脚本路径和目标参数)
|
|
EXISTING_JOB=$(crontab -l 2>/dev/null | grep "$SCRIPT_PATH $TARGET")
|
|
|
|
if [ -n "$EXISTING_JOB" ]; then
|
|
echo "提示: 该任务已存在,将先删除旧任务再重新添加..."
|
|
crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH $TARGET" | crontab -
|
|
fi
|
|
|
|
(crontab -l 2>/dev/null; echo "$CRON_CMD") | crontab -
|
|
|
|
echo "✅ $TARGET 增量定时任务设置成功"
|
|
crontab -l
|