定时滚动数组内容并发送通知
背景
一家小公司每周需要内部2人一组打扫卫生。总共5组10个人。
地面:每1周1组2个人打扫。
厕所:每2周1组2个人打扫。
两者同时进行,想到可以利用 linux 的 crontab
系统级的定时任务去触发,发送企业微信通知下消息,来告知本周打扫卫生的人。
具体实现如下(1个文本文件, 2个脚本, 1个定时配置):
/root/.notice/names.txt
1 2 3 4 5
| 熊大,熊二 张三,李四 王五,赵六 孙七,周八 吴九,郑十
|
脚本
/root/.notice/floor_sweep.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #!/bin/bash
file="/root/.notice/names.txt" IFS=$'\n' read -d '' -r -a lines < "$file"
index=`cat /root/.notice/last_floor_index` pair=${lines[$index]} first=$(echo $pair | cut -d',' -f1) second=$(echo $pair | cut -d',' -f2) echo "当前人员:$first, $second"
((index=(index + 1) % ${#lines[@]})) echo $index > /root/.notice/last_floor_index
CURL_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=yyy'
push_webhook_msg() { currentDate=`date +%Y-%m-%d`
CURL_DATA="{\"msgtype\": \"text\", \"text\": {\"content\": \"本周 $currentDate 打扫【地面】(每1周):$first, $second\", \"mentioned_list\":[\"@all\"]}}" echo "$CURL_DATA"
CURL_CMD="curl \"$CURL_URL\" -H \"Content-Type: application/json\" -d '$CURL_DATA'"
CURL_RES=$(eval $CURL_CMD) echo $CURL_RES }
push_webhook_msg
exit 0
|
/root/.notice/toilet_sweep.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #!/bin/bash
week_num=`date +%W` ((week_res=$week_num % 2)) echo week_res=$week_res if [ $week_res != 0 ];then echo exit exit 0 fi
file="/root/.notice/names.txt" IFS=$'\n' read -d '' -r -a lines < "$file"
index=`cat /root/.notice/last_toilet_index` pair=${lines[$index]} first=$(echo $pair | cut -d',' -f1) second=$(echo $pair | cut -d',' -f2) echo "当前人员:$first, $second"
((index=(index + 1) % ${#lines[@]})) echo $index > /root/.notice/last_toilet_index
CURL_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=yyy'
push_webhook_msg() { currentDate=`date +%Y-%m-%d`
CURL_DATA="{\"msgtype\": \"text\", \"text\": {\"content\": \"本周 $currentDate 打扫【厕所】(每2周):$first, $second\", \"mentioned_list\":[\"@all\"]}}" echo "$CURL_DATA"
CURL_CMD="curl \"$CURL_URL\" -H \"Content-Type: application/json\" -d '$CURL_DATA'"
CURL_RES=$(eval $CURL_CMD) echo $CURL_RES }
push_webhook_msg
exit 0
|
crontab配置
1 2 3
| $ crontab -e 30 11 * * 6 /root/.notice/floor_sweep.sh 30 11 * * 6 /root/.notice/toilet_sweep.sh
|
每周六都发送通知,但是偶数周才需要通知厕所任务,所以奇数周厕所任务跳过不发送。
发送效果: