shell脚本crontab定时--企业微信机器人工作日发布通知提醒

1、背景

原先已写过一版每周一到周五发布通知的,但眼看要到十一,想必大家在假期期间都不想收到公司信息,所以这次增加了工作日的限制,只在工作日或调休的上班日发出消息通知。
【弊端:个人能力有限,文本文档格式,且只能发出简短日期等信息。】

2、准备

目前没有渠道可以获得工作日及调休时间,只能个人手工记录,如果大家有渠道的可以留言告知我呀,感谢!【链接等等,如果是公告通知等等我也调用不了接口啊】

2.1、将工作日以及调休日期等记录到表格里,粘贴到文本文档中。

【此处先用表格后用文档,在于方便粘贴及调整数据格式等,也可以直接写入到文档中,实际也是只使用文档。】

列1:日期,为打卡日。
列2:对日期进行说明,正常的工作日还是调休。
列3:星期几。
列4:是否需要报工,默认1949-10-01,当需要报工的时候填写当天日期。此处逻辑为截至每周日的最后一个工作日或节前发出报工提醒。

  • 表格-2024工作日.xlsx
日期说明星期报工
2024-09-02工作日11949-10-01
2024-09-03工作日21949-10-01
2024-09-04工作日31949-10-01
2024-09-05工作日41949-10-01
2024-09-06工作日52024-09-06
2024-09-09工作日11949-10-01
2024-09-10工作日21949-10-01
2024-09-11工作日31949-10-01
2024-09-12工作日41949-10-01
2024-09-13工作日51949-10-01
2024-09-14中秋节调休62024-09-14
2024-09-18工作日31949-10-01
2024-09-19工作日41949-10-01
2024-09-20工作日52024-09-20
2024-09-23工作日11949-10-01
2024-09-24工作日21949-10-01
2024-09-25工作日31949-10-01
2024-09-26工作日42024-09-26
2024-09-27工作日51949-10-01
2024-09-29国庆调休72024-09-29
2024-09-30工作日12024-09-30
2024-10-08工作日21949-10-01
2024-10-09工作日31949-10-01
2024-10-10工作日41949-10-01
2024-10-11工作日51949-10-01
2024-10-12国庆调休62024-10-12
2024-10-14工作日11949-10-01
2024-10-15工作日21949-10-01
2024-10-16工作日31949-10-01
2024-10-17工作日41949-10-01
2024-10-18工作日52024-10-18
2024-10-21工作日11949-10-01
2024-10-22工作日21949-10-01
2024-10-23工作日31949-10-01
2024-10-24工作日41949-10-01
2024-10-25工作日52024-10-25
2024-10-28工作日11949-10-01
2024-10-29工作日21949-10-01
2024-10-30工作日31949-10-01
2024-10-31工作日41949-10-01
2024-11-01工作日52024-11-01
2024-11-04工作日11949-10-01
2024-11-05工作日21949-10-01
2024-11-06工作日31949-10-01
2024-11-07工作日41949-10-01
2024-11-08工作日52024-11-08
2024-11-11工作日11949-10-01
2024-11-12工作日21949-10-01
2024-11-13工作日31949-10-01
2024-11-14工作日41949-10-01
2024-11-15工作日52024-11-15
2024-11-18工作日11949-10-01
2024-11-19工作日21949-10-01
2024-11-20工作日31949-10-01
2024-11-21工作日41949-10-01
2024-11-22工作日52024-11-22
2024-11-25工作日11949-10-01
2024-11-26工作日21949-10-01
2024-11-27工作日31949-10-01
2024-11-28工作日41949-10-01
2024-11-29工作日52024-11-29
2024-12-02工作日11949-10-01
2024-12-03工作日21949-10-01
2024-12-04工作日31949-10-01
2024-12-05工作日41949-10-01
2024-12-06工作日52024-12-06
2024-12-09工作日11949-10-01
2024-12-10工作日21949-10-01
2024-12-11工作日31949-10-01
2024-12-12工作日41949-10-01
2024-12-13工作日52024-12-13
2024-12-16工作日11949-10-01
2024-12-17工作日21949-10-01
2024-12-18工作日31949-10-01
2024-12-19工作日41949-10-01
2024-12-20工作日52024-12-20
2024-12-23工作日11949-10-01
2024-12-24工作日21949-10-01
2024-12-25工作日31949-10-01
2024-12-26工作日41949-10-01
2024-12-27工作日52024-12-27
2024-12-30工作日11949-10-01
2024-12-31工作日21949-10-01
  • 文档-2024工作日.txt
日期	说明	星期	报工
2024-09-02	工作日	1	1949-10-01
2024-09-03	工作日	2	1949-10-01
2024-09-04	工作日	3	1949-10-01
2024-09-05	工作日	4	1949-10-01
2024-09-06	工作日	5	2024-09-06
2024-09-09	工作日	1	1949-10-01
2024-09-10	工作日	2	1949-10-01
2024-09-11	工作日	3	1949-10-01
2024-09-12	工作日	4	1949-10-01
2024-09-13	工作日	5	1949-10-01
2024-09-14	中秋节调休	6	2024-09-14
2024-09-18	工作日	3	1949-10-01
2024-09-19	工作日	4	1949-10-01
2024-09-20	工作日	5	2024-09-20
2024-09-23	工作日	1	1949-10-01
2024-09-24	工作日	2	1949-10-01
2024-09-25	工作日	3	1949-10-01
2024-09-26	工作日	4	2024-09-26
2024-09-27	工作日	5	1949-10-01
2024-09-29	国庆调休	7	2024-09-29
2024-09-30	工作日	1	2024-09-30
2024-10-08	工作日	2	1949-10-01
2024-10-09	工作日	3	1949-10-01
2024-10-10	工作日	4	1949-10-01
2024-10-11	工作日	5	1949-10-01
2024-10-12	国庆调休	6	2024-10-12
2024-10-14	工作日	1	1949-10-01
2024-10-15	工作日	2	1949-10-01
2024-10-16	工作日	3	1949-10-01
2024-10-17	工作日	4	1949-10-01
2024-10-18	工作日	5	2024-10-18
2024-10-21	工作日	1	1949-10-01
2024-10-22	工作日	2	1949-10-01
2024-10-23	工作日	3	1949-10-01
2024-10-24	工作日	4	1949-10-01
2024-10-25	工作日	5	2024-10-25
2024-10-28	工作日	1	1949-10-01
2024-10-29	工作日	2	1949-10-01
2024-10-30	工作日	3	1949-10-01
2024-10-31	工作日	4	1949-10-01
2024-11-01	工作日	5	2024-11-01
2024-11-04	工作日	1	1949-10-01
2024-11-05	工作日	2	1949-10-01
2024-11-06	工作日	3	1949-10-01
2024-11-07	工作日	4	1949-10-01
2024-11-08	工作日	5	2024-11-08
2024-11-11	工作日	1	1949-10-01
2024-11-12	工作日	2	1949-10-01
2024-11-13	工作日	3	1949-10-01
2024-11-14	工作日	4	1949-10-01
2024-11-15	工作日	5	2024-11-15
2024-11-18	工作日	1	1949-10-01
2024-11-19	工作日	2	1949-10-01
2024-11-20	工作日	3	1949-10-01
2024-11-21	工作日	4	1949-10-01
2024-11-22	工作日	5	2024-11-22
2024-11-25	工作日	1	1949-10-01
2024-11-26	工作日	2	1949-10-01
2024-11-27	工作日	3	1949-10-01
2024-11-28	工作日	4	1949-10-01
2024-11-29	工作日	5	2024-11-29
2024-12-02	工作日	1	1949-10-01
2024-12-03	工作日	2	1949-10-01
2024-12-04	工作日	3	1949-10-01
2024-12-05	工作日	4	1949-10-01
2024-12-06	工作日	5	2024-12-06
2024-12-09	工作日	1	1949-10-01
2024-12-10	工作日	2	1949-10-01
2024-12-11	工作日	3	1949-10-01
2024-12-12	工作日	4	1949-10-01
2024-12-13	工作日	5	2024-12-13
2024-12-16	工作日	1	1949-10-01
2024-12-17	工作日	2	1949-10-01
2024-12-18	工作日	3	1949-10-01
2024-12-19	工作日	4	1949-10-01
2024-12-20	工作日	5	2024-12-20
2024-12-23	工作日	1	1949-10-01
2024-12-24	工作日	2	1949-10-01
2024-12-25	工作日	3	1949-10-01
2024-12-26	工作日	4	1949-10-01
2024-12-27	工作日	5	2024-12-27
2024-12-30	工作日	1	1949-10-01
2024-12-31	工作日	2	1949-10-01

2.2、将txt文档上传到服务器指定路径

上传到指定路径/appadmin

3、步骤

3.1、添加机器人

1.打开企业信息群聊,点击右上角三个点, 添加群机器人 ,新创建一个机器人,起个名字;
2. 群里会显示你已经添加了机器人,群页面右侧显示你刚刚添加的机器人,双击查看资料,有显示Webhook网址,这个记下来且记得千万不要随便给别人,不然陌生人就能给你们群发信息了!!!信息泄露很危险!;
3. 可以在介绍那里写明这个机器人详细的作用,比如:打卡提醒等等;
4. 点击编辑按钮,在Webhook地址下面有个机器人配置说明,大家可以看看根据需求修改。

3.2、shell脚本编写

找到一台运行中不会停掉的服务器,在此服务器上写shell脚本及设置定时任务。
1.在/appadmin下新建脚本clock.sh。

cd /appadmin
touch clock.sh
touch report.sh

2.编辑脚本(此处用到刚刚需要记下来的Webhook地址)

  • 打卡提醒

vi clock.sh

#!/bin/bash
# 当前日期
current_date=$(date +%Y-%m-%d)
# 当前月份
current_month=$(date +%m)
# 文本文件路径
text_file="/appadmin/2024工作日.txt"
# 消息内容
#MESSAGE="Hello! Current time is $(date +'%Y-%m-%d %H:%M:%S')."
#输出表头
#head -n 1 $text_file
#初始化变量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[0]}
    date_strr=${columns[1]}
    # 将日期字符串转换为时间戳
    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 ([ $delta_seconds -eq 0 ]) && [ $delta_days -eq 0 ]; then
        # 如果当天日期在文档中,说明是工作日或调休日期
#output+=$""$line""
#output=""$date_str"\"$date_strr"
output=$date_strr
fi
done < "$text_file"
content=$output
echo "每天执行语句判断是否需要打卡"
echo ${#output}
echo -e "$output"
date=$(date +%Y-%m-%d)
time=$(date "+%H:%M:%S")
content="**消息提醒**
 >info:各位好,请打卡,
 >time:$date $content
"
webHookUrl="刚刚记下来的Webhook地址"
ontent='{"msgtype": "text","text": {"content": "'$content'","mentioned_list":"@all"},}'
##检查变量output的长度是否大于2。如果条件为真(即output的长度大于2),则执行then后面的命令。
if [ ${#output} -gt 2 ];then
curl --data-ascii "$content" $webHookUrl
echo "over!"
fi
  • 报工提醒

vi report.sh

#!/bin/bash
# 当前日期
current_date=$(date +%Y-%m-%d)
# 当前月份
current_month=$(date +%m)
# 文本文件路径
text_file="/appadmin/2024工作日.txt"
# 消息内容
#MESSAGE="Hello! Current time is $(date +'%Y-%m-%d %H:%M:%S')."
#输出表头
#head -n 1 $text_file
#初始化变量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[0]}
    date_str1=${columns[1]}
    # 将日期字符串转换为时间戳
    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天
    date_str3=${columns[3]}
    # 将日期字符串转换为时间戳
    date_timestamp3=$(date -d "$date_str3" +%s)
  # 计算日期差(以秒为单位)
    delta_days3=$((date_timestamp3 - 1725292800 )) 
    # 判断条件
	    if ([ $delta_days3 -eq  0 ]); then
        # 如果当天日期在文档中,说明是工作日或调休日期
#output+=$""$line""
#output=$date_str"\"$date_str1"\"$date_str3
output=$date_str"\"$date_str1"\"
fi
done < "$text_file"
content=$output
echo "每天执行语句判断是否需要提醒打卡"
#echo ${#output}
#echo -e "$output"
echo $date_timestamp3
echo $delta_days3
echo $content
date=$(date +%Y-%m-%d)
time=$(date "+%H:%M:%S")
content="**今天记得报工呀**
"
webHookUrl="刚刚记下来的Webhook地址"
content='{"msgtype": "text","text": {"content": "'$content'","mentioned_list":"@all"},}'
##检查变量output的长度是否大于3。如果条件为真(即output的长度大于3),则执行then后面的命令。
if [ ${#output} -gt 3 ];then
curl --data-ascii "$content" $webHookUrl
echo "over!"
fi

3.3、定时任务设置

正常的打卡时间是早9晚6,所以要早于9点,晚于6点。clock.sh的执行时间在每天上班早8点30分,及晚上6点,report.sh的执行时间在每一周最后一个工作日,或节假日前的一天晚上6点。

crontab -e

增加内容:
30 8 * * * /appadmin/clock.sh
0 18 * * * /appadmin/clock.sh
0 18 * * * /appadmin/report.sh

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

4、效果展示

消息提醒
info:各位好,请打卡,
time:2024-09-04 工作日
@所有人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值