shell脚本crontab定时--企业微信机器人产品授权到期提醒
背景
公司内部使用企业微信作为通讯软件,现场环境使用产品需按期申请授权,否则到期后页面展示有问题影响用户使用,即便页面会展示产品授权的到期日,但每天都有事务处理忙起来连今天的日期都会忘记,所以现在准备通过shell脚本crontab定时的方法来发送消息提醒。【涉及到文件上传,请看完全篇后再实操】
步骤
添加机器人
1.打开企业信息群聊,点击右上角三个点, 添加群机器人 ,新创建一个机器人,起个名字;
2. 群里会显示你已经添加了机器人,群页面右侧显示你刚刚添加的机器人,双击查看资料,有显示Webhook网址,这个记下来且记得千万不要随便给别人,不然陌生人就能给你们群发信息了!!!信息泄露很危险!;
3. 可以在介绍那里写明这个机器人详细的作用,比如:产品授权到期提醒等等;
4. 点击编辑按钮,在Webhook地址下面有个机器人配置说明,大家可以看看根据需求修改。
上传产品授权文件+shell脚本编写
找到一台运行中不会停掉的服务器,在此服务器上写shell脚本及设置定时任务。
1. 准备表格
根据情况可以改为csv,因为我的数据情况不适用于csv,所以得写到表格中,然后表格粘贴到txt里,再上传到服务器指定路径。
序号 | 环境 | 日期 | 备注 |
---|---|---|---|
1 | 测试环境 | 2024-07-22 | 申请单号123456789 |
2 | 生产环境 | 2024-10-22 | 申请单号987654321 |
2. 将以上数据粘贴到txt中
license.txt,并上传到指定路径/appadmin
序号 环境 日期 备注
1 测试环境 2024-07-22 申请单号123456789
2 生产环境 2024-10-22 申请单号987654321
3. 在/appadmin下新建脚本license.sh
因为输出时默认带表头,所以设置为当输出内容大于3行再输出。
因1月、2月恰逢过年期间,10月又有十一假期,所以提醒时间要早些设为13天就提醒。其他月份正常按照7天提醒。
#!/bin/bash
# 当前日期
current_date=$(date +%Y-%m-%d)
# 当前月份
current_month=$(date +%m)
# 文本文件路径
text_file="/appadmin/license.txt"
#初始化变量output为空
output=""
# 逐行读取文件内容并处理
line_number=0
while IFS= read -r line; do
line_number=$((line_number + 1))
if [ $line_number -eq 1 ]; then
# 跳过第一行(表头)
continue
fi
# 使用空格作为分隔符拆分行数据
columns=($line)
# 第三列为日期
date_str=${columns[2]}
# 将日期字符串转换为时间戳
date_timestamp=$(date -d "$date_str" +%s)
current_timestamp=$(date -d "$current_date" +%s)
# 计算日期差(以秒为单位)
delta_seconds=$((date_timestamp - current_timestamp))
delta_days=$((delta_seconds / 86400)) # 86400秒 = 1天
# 判断条件
if ([ $current_month -eq 01 ] || [ $current_month -eq 02 ] || [ $current_month -eq 10 ]) && [ $delta_days -le 13 ]; then
# 如果当前月份是1月、2月或10月,并且日期差小于等于13天
#echo "$line"
output+=\n$""$line""
#echo "$output"
elif [ $delta_days -le 7 ]; then
# 其他月份,日期差小于等于7天
#echo "$line"
output+="\n"$""$line""
#echo "$output"
fi
done < "$text_file"
content=$output
#content=${echo -e "$output"}
echo ${#output}
echo -e "$output"
#echo -e ""$content""
date=$(date +%Y-%m-%d)
time=$(date "+%H:%M:%S")
content="
**产品授权到期提醒**
>time:$date $time
>info:
序号 环境 日期 备注
$content
"
webHookUrl="刚刚记下来的Webhook地址"
content='{"msgtype": "markdown","markdown": {"content": "'$content'","mentioned_list":"@all"},}'
if [ ${#output} -gt 3 ];then
curl --data-ascii "$content" $webHookUrl
echo "over!"
fi
4. 定时任务设置
每天上午9天都要执行脚本判断,收到提醒后就尽快去提醒,申请到新的授权后及时更新数据信息并上传。
crontab -e
增加内容:
0 9 * * 1-5 /appadmin/license.sh
crontab -l
可看到目前已申请的定时任务有哪些