1.环境要求
我安装的是JDK1.8,Python2.7.13
记录下使用crontab,datax定时同步数据遇到的问题。 1.开始使用如下配置,死活不执行。网上说crontab环境便利的问题,设置了也没反应。
crontab中的环境变量默认不会将我们自行定义的环境变量载入进来,所以执行脚本的时候,需要执行source命令 修改如下执行成功:
[root@hdp-01 home]# crontab -l */3 * * * * sh /data/crontab/mysqltomysql1.sh [root@hdp-01 crontab]# cat mysqltomysql1.sh #!/bin/sh source /etc/profile python /root/datax/bin/datax.py /root/ods_black_list.json >>/home/log.`date +\%Y\%m\%d\%H\%M\%S` 2>&1 |
2.配置任务
(1)安装crond服务
yum install crontabs
命令说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crond服务状态 输入
service crond status
显示如下表示服务已启动
[root@localhost /]# service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2017-05-15 15:51:05 CST; 9min ago
Main PID: 6550 (crond)
CGroup: /system.slice/crond.service
└─6550 /usr/sbin/crond -n
May 15 15:51:05 localhost.localdomain systemd[1]: Started Command Scheduler.
May 15 15:51:05 localhost.localdomain systemd[1]: Starting Command Scheduler...
May 15 15:51:05 localhost.localdomain crond[6550]: (CRON) INFO (RANDOM_DELAY ...
May 15 15:51:06 localhost.localdomain crond[6550]: (CRON) INFO (running with ...
May 15 15:51:06 localhost.localdomain crond[6550]: (CRON) INFO (@reboot jobs ...
Hint: Some lines were ellipsized, use -l to show in full.
(2).创建作业配置文件(json格式)
这个是从一个oracle数据库读取数据并写入另一个oracle数据库的一个作业配置,
oracle2oracle.json { "job": { "setting": { "speed": { "byte":1048 }, }, "content": [ { "reader": { "name": "oraclereader", "parameter": { "column" : [ "name","age" ], "connection":[{ "jdbcUrl":["jdbc:oracle:thin:@192.168.10.15:1521:orcl"], "table":["TEST_A"], }], "password":"123456", "username":"root", } }, "writer": { "name": "oraclewriter", "parameter": { "username": "root", "password": "111222", "column": ["filed1","filed2"], "preSql": [ "delete from TEST_B" ], "connection":[{ "jdbcUrl":"jdbc:oracle:thin:@192.168.11.18:1521:orcl", "table":["TEST_B"], }], } } } ] } }
|
(3).列出crontab文件,输入crontab -l
若显示以下内容 ,则表示当前用户没有定时任务(xxx表示当前用户),需要创建crontab文件,并提交,查看步骤(4)
no crontal for xxx
若显示类似以下内容 ,则表示当前用户已经有正在运行的定时任务,只需输入crontab -e 来编辑crontab文件,查看步骤(5)
0,10,20,35,44,50 * * * * python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json >>/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S` 2>&1,
(4).创建crontab文件(以前从未创建过crontab任务)
创建一个名为crondatax的crontab文件,命令行进入到相应的目录 vi crondatax,创建并打开文件,输入以下内容:
5 13 * * * python /home/admin/datax3/bin/datax.py /home/admin/oracle2oracle.json >>/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S` 2>&1
5 13 * * *表示每天的13点5分执行这个任务。
python/home/admin/datax3/bin/datax.py表示安装的DataX datax.py所在的目录的绝对路径,一般在datax/bin/目录下。
/home/admin/oracle2oracle.json.json表示作业配置文件的绝对路径
/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S`表示任务运行时产生日志的输出路径,并以log.当前时间命名,要替换成真实存在的绝对路径。
文件编辑完成之后,按esc,再按shift+;,再输入wq,则保存并退出文件编辑。
(5)编辑已有crontab文件,修改或增加定时任务
输入crontab -e 打开任务配置文件。增加任务即可,格式和步骤(4)一致。
截图如下:
(6)提交 crontab文件
输入crontab /home/datax/job/crondatax crondatax是步骤(4)中创建的文件的名称,如果终端所在目录就是crondatax文件所在目录,
可以直接输入crontab crondatax。
提交之后输入crontab -l 就能看到刚配置的任务。
(7)重启crontab服务
输入
/sbin/service crond restart
在定时的时间到后,任务便开始执行,同时会在配置的log目录下生成对应的日志文件,在日志文件中可查看任务的运行情况。
(8)任务配置文件crontab命令格式说明
参数可以配置多个,中间用逗号分隔比如想每10分钟执行一次定时任务,可以按以下方式配置。
0,10,20,30,40,50 13 * * * python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json >>/home/log.`date +\%Y\%m\%d\%H\%M\%S` 2>&1
我记性不好,多做记录方便自己查阅。