Linux中使用Cron定时执行SQL任务的实现步骤
作者:Mr-Wanter
在Linux系统中,计划任务(Cron)是一种强大的工具,可以自动执行预定的任务,它非常适合定期运行脚本、备份数据、清理临时文件等一系列重复性任务,本文给大家介绍了如何在Linux中使用Cron定时执行SQL任务,需要的朋友可以参考下
前言
演示数据需要每天更新监控数据,不想手动执行,想到以下解决方案
- navicat 创建定时任务
- java服务定时执行
- linux crontab 定时执行sql脚本
一、方案分析
我选择了第三个方案
- 方案一需要本地navicat运行时才可以执行定时,当周末或请假等未开机情况下,数据得不到更新
- 方案二成本高,服务表示自己不纯洁了 O(∩_∩)O
- 方案三还不错,什么?不会?我教你啊!
二、使用步骤
我的数据库是kingbase,根据自己的数据库适应性调整
1.准备脚本
- sql文件
test.sql
-- 天气监测数据 UPDATE "natural_monitor"."weather_monitor_data" SET data_time = data_time :: TIME + CURRENT_DATE;
- 执行sql文件的执行文件
sql_script.sh
#!/bin/bash cd /data/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/Server/bin password=数据库密码 ./ksql -p 54321 -d 数据库名称 -U 数据库账号 -f /data/cron/*.sql
2.crontab脚本执行
crontab -e
0 12 * * * /data/cron/sql_script.sh >> /data/cron/log_info.out 2>&1 &
踩坑
- 不知道ksql 路径
因为kingbase安装的驱动是pgsql的,所以开始查的方向是psql,但是服务器上没有这个文件,后来发现kingbase对应的是ksql
cd / find -name ksql
没有权限执行ksql
查到的ksql路径是/data/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/Server/bin
所以运行脚本改为password=数据库密码 ./data/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/Server/bin/ksql -p 54321 -d 数据库名称 -U 数据库账号 -f /data/cron/*.sql
,结果查不到ksql路径。
尝试更换服务器用户为kingbase依旧无效。
解决方法: 先cd到ksql目录,后执行./ksql/data/cron/update_status_nohup.out目录没有权限
采用root用户去执行crontab
,各个用户之间的crontab是隔离的。记得校准服务器时间,或者查询好服务器时间
到此这篇关于Linux中使用Cron定时执行SQL任务的实现步骤的文章就介绍到这了,更多相关Linux Cron定时执行SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!