Linux定时任务执行docker容器内的sql文件

本文介绍如何使用Linux系统的crontab命令及编辑/etc/crontab文件来实现定时执行Shell脚本,以满足特定时间重置数据库的需求,并提供了具体的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近出差现场,客户要求要在当天晚上凌晨将某个表内的数据重置。数据库采用pgsql,是一个单独运行的容器。

        其实可以采用代码的形式,在凌晨的时候执行一个方法,方法为执行数据库sql将该表内的数据重置。但个人一直想尝试使用linux定时任务执行shell脚本的方式,故使用打算使用linux定时任务。先有两种方案:crontab -e 和修改/etc/crontab 文件。

方式一:crontab -e命令

       

crontab [-u username] [-l|-e|-r]

  1. 选项与参数:

  2. -u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;

  3. -e :编辑 crontab 的工作内容

  4. -l :查阅 crontab 的工作内容

  5. -r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

         可以先执行crotab -l 命令查看有无定时任务执行。no crontab for root,表示当前环境中没有通过crontab -l

 

执行crontab -e命令后,会打开一个文件,此时将需要调用的定时任务写到此文件后,然后保存,然后重启定时服务。

        

 

        例如,我这边要执行的shell脚本文件为:/home/crontab.sh ,客户希望当天(10月12日23点点59分)重置数据,那么可以这么写:

59 23 12 10 * sh /home/crontab.sh

然后重载定时服务:

systemctl restart crond.service

此时用crontab -l 命令去查看:

 此crontab.sh 中去执行容器内的脚本,容器内的脚本再去执行重置数据库功能。

crontab.sh写的比较简单,docker exec 容器名称 bash -c "sh 容器脚本",切记此处不要加-it,因为-it为与容器有交互操作,而定时任务自动执行是没有可交互终端的。查看/会报错:

the input device is not a TTY

!#/bin/bash

docker exec postgresserver bash -c "sh /home/crontabsql.sh"

方式二:修改/etc/crondtab文件

        思想与方式一基本一样,但是要注意的是在编写/etc/crontab文件时,是需要指定用户和脚本路径的。

vim /etc/crontab

 文件中其实已经说明的很清晰了,于是可这么执行

59 23 14 10 * root /bin/sh /home/crond.sh

PS:可以查看/var/log/cron 日志看定时任务的执行情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值