如何在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. 记得校准服务器时间,或者查询好服务器时间


相关推荐
炫友呀4 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
YA3336 小时前
java基础(九)sql基础及索引
java·开发语言·sql
花小璇学linux8 小时前
imx6ull-驱动开发篇24——Linux 中断API函数
linux·驱动开发·嵌入式软件
林开落L9 小时前
库制作与原理(下)
linux·开发语言·centos·库制作与原理
码出未来8579 小时前
浅谈DDL、DSL、DCL、DML、DQL
sql
AI 嗯啦9 小时前
SQL详细语法教程(四)约束和多表查询
数据库·人工智能·sql
wxy3199 小时前
嵌入式LINUX——————TCP并发服务器
java·linux·网络
阿里云大数据AI技术9 小时前
【跨国数仓迁移最佳实践6】MaxCompute SQL语法及函数功能增强,10万条SQL转写顺利迁移
python·sql
Castamere9 小时前
配置 Linux 终端 (zsh)
linux
小韩博10 小时前
metasploit 框架安装更新遇到无法下载问题如何解决
linux·网络安全·公钥·下载失败