前言
我从网络上查了老半天,全都是每隔几天运行一次,但是在第二月一日便会重置,例如1月31日运行了,2月1日又运行了,这明显没有隔三天。
我一咬牙一跺脚,干脆自己写一个脚本得了。
我一共编辑了两个shell脚本,彻底解决了月初重置定时的问题。
一、main.sh
首先按照秒数记录首次执行定时的时间。
然后以变量的形式将执行定时的时间以秒数赋值给变量。
设置一个三天的间隔时间,同样是以秒计算。
然后做一个判断,是否中间间隔了3乘24*3600多秒。
是就运行sql并运行assist.sh,不是就不运行。
二、assist.sh
这个脚本用来修改main.sh的【首先按照秒数记录首次执行定时的时间】 这个的时间的。下一次运行的时候就是用这个常量和启动定时的时间变量之间的比较了。
三、定时
定时只要设置成每天运行即可,因为是秒数之间的比较是否相差了3乘24*3600这么多,所以不存在月初重置的情况,实测可行。
四、直接上代码
main.sh
#!/bin/bash
#filename: main.sh
#这里的1631444400这个数是当前时间的以秒计算的时间,可以网上搜索一下当前是多少秒
last_run_time=1631444400
current=`date +%Y-%m-%d`
curr_run_time=`date -d "$current 19:00" +%s`
seconds=$((3*24*3600))
if [[ $((curr_run_time - last_run_time)) -ge $seconds ]] ; then
sh /home/view/yhm/assist.sh
sqlplus 数据库用户名/密码 < /home/view/yhm/CardAcc.sql >> /home/view/yhm/cardacc.txt
fi
assist.sh
#!/bin/bash
#filename: assist.sh
current=`date +%Y-%m-%d`
curr_run_time=`date -d "$current 19:00" +%s`
sed -i "s/last_run_time=.*/last_run_time=${curr_run_time}/" /home/view/yhm/main.sh
创建完这两个文件后别忘了设置777权限哦
chmod 777 main.sh
chmod 777 assist.sh