Linux 实现crontab定时执行kettle资源库作业

Linux 实现crontab定时执行kettle资源库任务

环境:centos7 kettle8.2 jdk1.8

话不多说,我直接在kettle安装目录下新建了一个.sh的脚本,功能就是执行我资源库中的一个作业,当日志文件大于10M的时候就清空该文件重新存日志

source ~/.bash_profile
source /etc/profile
filename=/usr/local/data-integration/logs/wgyth.log
filesize=`ls -l $filename | awk '{ print $5 }'`
maxsize=$((1024*1024*10))
if [ $filesize -gt $maxsize ]
then
     rm -rf /usr/local/data-integration/logs/wgyth.log
fi

/usr/local/data-integration/kitchen.sh -rep=wgyth_linux -user=admin -pass=admin -dir="/" -job="一体化-文件管理" -level=Basic>>/usr/local/data-integration/logs/wgyth.log

编辑定时,crontab是linux自带的,无需安装别的东西,代表一分钟执行这个脚本一次

crontab -e #编辑定时
crontab -l #查看运行中的定时
crontab -r #删除所有定时
*/1 * * * * /usr/local/data-integration/cron_file.sh

crontab -l能查询出来刚刚编辑的定时的话,这时候就已经能一分钟执行一次你写的那个.sh脚本了,测试可以写一个简单的脚本,例如打印一句话等等

下面是cron常用命令

rpm -qa | grep crontab 查看服务器是否安装定时 cron

# yum安装
yum -y install vixie-cron
yum -y install crontabs

systemctl is-enabled crond.service 检测cron是否是自启动

enabled表示已启用自启动
disable标识未启用自启动

systemctl enable crond.service 未启动 使用该命令启动

systemctl disable crond.service 启动 使用该命令停止

systemctl status crond.service  查询cron状态 显示active则代表启动成功

systemctl start crond.service 启动corn定时 不报错代表启动成功

systemctl stop crond.service 停止

systemctl restart crond.service 重启

systemctl reload crond.service 重新加载core

crontab -e 编辑已有的定时

crontab -l 运行中的定时

crontab -r 删除所有定时

这时候服务器的定时已经完成了,但是还会有一个问题就是,如果业务需求一分钟扫描业务一次,当一分钟没执行完当前kettle的话,当第二次定时执行的kettle的时候,会把第一次的kettle锁住,所以我们需要写一个文件锁,当第一次定时任务没执行完的时候第二次定时任务等待。

利用linux自带的flock文件锁功能即可实现

#在.sh脚本的地方在新建一个文件 .lock 结尾的空文件即可
touch cron_file.lock
#然后重新编辑定时任务
crontab -e

*/1 * * * * flock -xn /usr/local/data-integration/cron_file.lock -c "/usr/local/data-integration/cron_file.sh"


#整理的flock锁常用命令
-s, --shared:    获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock:  如果没有立即获得锁,直接失败而不是等待
-w, --timeout:   如果没有立即获得锁,等待指定时间
-o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command:   在shell中运行一个单独的命令
-h, --help       显示帮助
-V, --version:   显示版本

这时候用上面的cron命令重启一下定时,现在定时任务就是等一个kettle跑完才会跑下一个kettle

你可能感兴趣的:(linux,kettle,java)