如何在Linux中使用Cron定时执行SQL任务

文章目录

前言

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

  1. navicat 创建定时任务
  2. java服务定时执行
  3. linux crontab 定时执行sql脚本

一、方案分析

我选择了第三个方案

  • 方案一需要本地navicat运行时才可以执行定时,当周末或请假等未开机情况下,数据得不到更新
  • 方案二成本高,服务表示自己不纯洁了 O(∩_∩)O
  • 方案三还不错,什么?不会?我教你啊!

二、使用步骤

我的数据库是kingbase,根据自己的数据库适应性调整

1.准备脚本

  1. sql文件 test.sql
sql 复制代码
-- 天气监测数据
UPDATE "natural_monitor"."weather_monitor_data" 
SET data_time = data_time :: TIME + CURRENT_DATE;
  1. 执行sql文件的执行文件 sql_script.sh
shell 复制代码
#!/bin/bash
cd /data/Kingbase/ES/V8/KESRealPro/V008R006C007B0024/Server/bin
password=数据库密码 ./ksql -p 54321 -d 数据库名称 -U 数据库账号 -f /data/cron/*.sql

2.crontab脚本执行

shell 复制代码
crontab -e
shell 复制代码
0 12 * * * /data/cron/sql_script.sh >> /data/cron/log_info.out 2>&1 &

踩坑

  1. 不知道ksql 路径
    因为kingbase安装的驱动是pgsql的,所以开始查的方向是psql,但是服务器上没有这个文件,后来发现kingbase对应的是ksql
shell 复制代码
cd /
find -name ksql
  1. 没有权限执行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

  2. /data/cron/update_status_nohup.out目录没有权限

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

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


相关推荐
迷迭所归处31 分钟前
Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid
linux·运维·服务器
周先森的怣忈32 分钟前
RHCE(第二部分)-----第三章:shell条件测试
linux·rhce
AIGCnn42 分钟前
jetson 无显示器配置WIFI
linux·jetson
yulingfeng5942 分钟前
Centos7 yum 报错“Could not resolve host: mirrorlist.centos.org; Unknown error“
linux·运维·centos
费曼乐园1 小时前
Zookeeper下面的conf目录下面的zoo.cfg
linux·分布式·zookeeper
网安kk2 小时前
2025年三个月自学手册 网络安全(黑客技术)
linux·网络·python·安全·web安全·网络安全·密码学
网络安全(华哥)2 小时前
linux 网络安全不完全笔记
linux·笔记·web安全
Atlim2 小时前
flink cdc使用flink sql方式运行一直报Make sure a planner module is on the classpath
大数据·sql·flink
it's all you7 小时前
CentOS设置静态IP教程(2024年12月20日)
linux·tcp/ip·centos
m0_694938019 小时前
Leetcode打卡:字符串及其反转中是否存在同一子字符串
linux·服务器·leetcode