由于公司运营需要我提供给他们网站的内容运营数据,一次两次还好,直接查询数据库发给他们,但是每天或者每周都要去查询,根据运维的习惯,那就是必须要写成脚本,让定时任务去跑,正好最近研究了钉钉机器人通知,自己写的脚本监控也是使用的钉钉机器人发送消息,非常好用,对于将数据推送给运营也非常适合,所以就创建了一个钉钉群创建了一个钉钉机器人,将运营拉进来,让钉钉机器人定时推送给他们。
具体实现主要是以下两个脚本,所有操作都写好步骤,在这里就不啰嗦了。
Article_statistics.sh 脚本
#!/bin/bash #临时存放查询到的数据 TMP_DIR=/data/mysql_tmp #在mysql中查询到的数据,导入到一个文件中,是以文本格式显示,如果是使用wps查看,将此文本格式的后缀改为xls # 也是可以打开的,不过如果是苹果系统,是打不开的,所以就考虑到了转码 mysql -uroot -p****** -e "SELECT *****" >$TMP_DIR/Article_statistics_`date +%F`.txt #使用python将txt转化为xls格式 #此转码脚本使用的是xlwt库 可以使用pip install xlwt 下载安装 #转码支持中文,使用的是python2.7 python /server/scripts/txt_to_xls.py $TMP_DIR/Article_statistics_`date +%F` #将转码后的文件,放到web服务器上,访问此文件会直接进行下载 scp $TMP_DIR/Article_statistics_`date +%F`.xls web_server01:/var/www/article_statistics/download/ #通过钉钉发送通知--(在dingmail中已经做好了固定连接,比如http://download.gaoyunwei.com/ ) #所以只需要添加后部分就可以通过点击打开连接进行下载 #因为是非公开数据,所以要进行配置nginx的auth认证 dingmail "download/Article_statistics_`date +%F`.xls"
dingmail 脚本
#!/bin/bash ACCESS_TOKEN="*********" #上面提到的固定的连接 URL="http://download.gaoyunwei.com/" #钉钉的api调用接口 Dingding_Url="https://oapi.dingtalk.com/robot/send?access_token=${ACCESS_TOKEN}" #这里采用的是每次推送都发送新的nginx认证密码 #生成10位的随机密码 PASSWD=`strings /dev/urandom |tr -dc A-Za-z0-9 | head -c10` #将密码写入临时文件,nginx认证请研究下其他人的博客 printf "downloaduser:$(openssl passwd -crypt $PASSWD)\n" >/tmp/httpasswd #发送密码覆盖上一次产生的密码到web服务器 scp /tmp/httpasswd web_server01:/etc/nginx/httpasswd #信息发送 # 注意这里的写法,使用的是markdown格式。 # [![download]($URL/png/4.png)]($URL/$1)\n 这一个实际上就是一个图片链接,钉钉上的消息看起来不是很枯燥 #这里可能会有朋友注意到我使用了ssh java2 远程来执行curl命令,这是因为我们数据库服务器不能上网^^^^^^,只能借网执行了,也算是个小技巧 SendMessageToDingding(){ ssh JAVA2 "curl -s ${Dingding_Url} -H 'Content-Type: application/json' -d ' { \"msgtype\": \"markdown\", \"markdown\": { \"title\":\"文章数据统计\", \"text\":\"#### app文章数据统计 \n > 采集时间:`date +%F_%T`\n\n > [![download]($URL/png/4.png)]($URL/$1)\n > ###### 账号:downloaduser密码:$PASSWD\" }, \"at\": { \"atMobiles\": [\"\"], \"isAtAll\": false } }'" } #这里采用了一个参数传递,关于钉钉的格式,也是有很多细节需要注意 #首先注意一点,不能随便去用空格,否则数据会被隔断 #具体钉钉的使用,这里只做个演示而已,详细部分请研究钉钉机器人的官方文档 SendMessageToDingding $1 echo
通过定时任务每周一发送一次
具体的实现效果