cron定时执行脚本--连接数据库查询并将结果生成指定名称并写入到指定路径

cron定时执行脚本--连接数据库查询并将结果生成指定名称并写入到指定路径

1、背景

客户每天上班都会从/software/amount路径下提取前一天其管理下两个部门的签约数量来计算奖金且文件存放天数不能超过15天。

2、思路

(1)查询当前路径下大于15天的文件,然后清理。
(2)每笔销售额都会记录到数据库,所以可通过连接数据库查询并将结果写入到/software/amount路径下。写一个shell脚本每天凌晨3点定期执行,文件命名为"日期_sales_account.dat"。
(3)A事业部每单奖金为销售额的1%,B事业部每单奖金为销售额的1.5%。【在数据库中,事业部字段为department,A为1,B为2,对应客户字段为head,客户为9】

3、脚本内容

到某目录下新建脚本
cd /appadmin
touch amount.sh
vi amount.sh

#!/bin/bash
# (1)输出数据
# 指定输出目录和文件名
output_dir="/software/amount"
# 获取当前日期--要显示昨天日期
today=$(date --date="yesterday"+%Y%m%d)
#today=$(date --date="15 days ago" +%Y%m%d)
# 文件名为日期加上.sql后缀的.dat文件
output_file="$output_dir/${today}_sales_account.dat"
echo $outfput_file
set -e
db_host="数据库ip,如果不需要此参数就不写"
db_user="数据库账号"
#db_pass="数据库密码"
db_name="要用的数据库库名"
export MYSQL_PWD=`echo '数据库密码'`
mysqlLogin="mysql -h${db_host} -u${db_user} -P 数据库端口"
query="SELECT SUM(CASE WHEN department= 1 THEN 0.01 ELSE 0 END ) AS sum1,SUM(CASE WHEN department= 2 THEN 0.015 ELSE 0 END ) AS sum2 AND head=9;"
#链接数据库并执行查询
cd /mysql/bin
$mysqlLogin -D $db_name -N -e "$query" | while read sum1 sum2;do
  total=$(sum1+sum2)
    #输出到文件
    echo "${today}_sales_account.dat">$output_file
    #输出成功消息
    echo "查询结果已写入文件:":$output_file
done
#(2)清理日志
#清理当前路径超过15天文件
log_path="/software/amount"
max_days=15
log_files=$(find $log_path -type f \( -mtime +$max_days \))
#echo "$file"
for file in $log_files;do
if rm "$file";then
       echo "文件"$file"删除成功。"
   else
       echo "删除文件"$file"失败。"
       exit 1 #出错时退出脚本,返回非零状态码
   fi
done
#清理工作完成,退出脚本并反馈成功状态
exit 0

4、定时任务设置

每天凌晨3点都要执行脚本判断,存放文件并清理过期文件。

crontab -e

增加内容:
0 3 * * * /appadmin/amount.sh

crontab -l 可看到目前已申请的定时任务有哪些

5、注意

mysql:[Warning]Using a password on the command line interface can be insecure.
查询结果已写入文件:/software/amount/20240801_sales_account.dat

此Warning是因为mysql数据库密码明示在脚本中了,所以要用echo的形式输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值