开发者

Linux中使用Cron定时执行SQL任务的实现步骤

开发者 https://www.devze.com 2024-11-20 18:32 出处:网络 作者: Mr-Wanter
目录前言一、方案分析二、使用步骤1.准备脚本2.crontab脚本执行踩坑前言 演示数据需要每天更新监控数据,不想手动执行,想到以下解决方案
目录
  • 前言
  • 一、方案分析
  • 二、使用步骤
    • 1.准备脚本
    • 2.crontab脚本执行
  • 踩坑

    前言

    演示数据需要每天更新监控数据,不想手动执行,想到以下解决方案

    • 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脚本执行

    crontaphpb -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
    
    1. 没有权限执行ksql

      查到的ksql路径是/data/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/Server/bin

      所以运行脚本改为password=数据库密码 ./data/KeNzaERhUZUingbawww.devze.comse/ES/V8/KEhttp://www.devze.comSRealPro/V008R006C007B0024/Server/bin/ksql -p 54321 -d 数据库名称 -U 数据库账号 -f /data/cron/*.sql,结果查不到ksql路径。

      尝试更换服务器用户为kingbase依旧无效。

      解决方法: 先cd到ksql目录,后执行./ksql

    2. /data/cron/upd编程客栈ate_status_nohup.out目录没有权限

      采用root用户去执行crontab,各个用户之间的crontab是隔离的。

    3. 记得校准服务器时间,或者查询好服务器时间

    到此这篇关于Linux中使用Cron定时执行SQL任务的实现步骤的文章就介绍到这了,更多相关Linux Cron定时执行SQL内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消