SHELL定时任务执行后钉钉机器人通知

最近,服务器不稳定,一些定时任务居然会出现没有执行的情况,所以,今天抽空写一个公共库,方便执行完毕调用钉钉机器人通知一下。

使用方法:将下面的代码保存为SdevSHcommon.sh文件,然后在需要的地方调用,注意,路径的正确。另外就是代码中的e**************************************************************f位置要修改为钉钉机器人的token值。要不,通知会出现错误,或者,在调用的时候指定token值。

然后在需要的地方,增加:

trap ‘finishNotice “{DATETIME}\n我这个是替换测试” 180********’ EXIT

将上面的”{DATETIME}\n我这个是替换测试”替换成你需要的内容,180********改为你的钉钉账户号,或者不填写,则通知全体。如果没有修改默认的token值则需要指定第三个参数。

其他就看代码吧,很简单的。

**********

#!/bin/bash

#
# . ./SdevSHcommon.sh
#

#
# USAGE:
# DingNotice “通知内容” [“AT谁”] [“群机器令牌”]
#
DingNotice()
{
local URL=”https://oapi.dingtalk.com/robot/send?access_token=”
# 通知内容
local MSG=$1
# at 谁
local TO=$2
# 机器人授权令牌
local TOTOKEN=$3
#
if [ “${MSG}” == “” ]; then
echo “通知内容不能为空”
exit 1
else
local datetime=$(date +”%Y-%m-%d %H:%M:%S”)
MSG=`echo ${MSG} | sed “s/{DATETIME}/${datetime}/g”`
#echo ${MSG}” – “${TO}” – “${TOTOKEN}
#exit 1
MSG=”\”msgtype\”: \”text\”,
\”text\”: {
\”content\”: \”${MSG}\”
}”
fi
if [ “${TO}” != “” ]; then
MSG=${MSG}”,”
TO=”\”at\”: {
\”atMobiles\”: [
\”${TO}\”
],
\”isAtAll\”: false
}”
fi
if [ “${TOTOKEN}” == “” ]; then
TOTOKEN=${URL}”e**************************************************************f
else
TOTOKEN=${URL}${TOTOKEN}
fi
#echo $@
#echo ${MSG}” – “${TO}” – “${TOTOKEN}
#exit 1
curl \
${TOTOKEN} \
-H ‘Content-Type: application/json’ \
-d “{
${MSG}
${TO}
}”
}

# DingNotice “测试一下”

#
# trap finishNotice EXIT
#
finishNotice()
{
# 通知内容
local MSG=$1
# at 谁
local TO=$2
DingNotice ${MSG} ${TO}
}
# trap ‘finishNotice “{DATETIME}\n我这个是替换测试” 180********’ EXIT

JS-百度云盘垃圾文件清理免费版

最近百度云盘增加了垃圾文件清理的功能,他能自动筛选出重复的文件及空文件,可惜,他是给会员使用的。

难道我们只能体验不能自动?

那肯定是不行的了,毕竟百度云盘的API接口没有开放,你想自动化都是没办法的啦,除非你将文件都拷贝到“我的应用数据”里面,而且还要开启早期的接口权限,要不基本上我看没戏。

扩展:百度个人云存储(PCS) | 文件API列表

那么我们能做啥呢?

列出清单然后一个个复制有点不方便噢,感觉一个个的删除过去麻烦,怎么办?那就自动列出一个清单,方便我们复制粘贴呗。

只要在垃圾文件清理界面,开启浏览器的“开发者工具(按F12就能打开)”,如果你不知道就算了,文章也别看下去了。

然后在控制台中,粘贴下面的代码,然后回车就会新打开一个新页面,然后里面都是当前页的文件及目录了,比较好的是,按照目录来展示噢,这个是唯一的亮点。

var wWindow = open();
var aItems = document.querySelectorAll('dd.g-clearfix.group-view-item.choosen');
var dLists = {};
aItems.forEach(function(el)
{
 let path = el.querySelectorAll('div.file-path a')[0].innerHTML.replace(/\s*/g,'');
 let value = el.querySelectorAll('div.file-name a')[0].innerHTML;
 if(dLists[ path ]==undefined) dLists[ path ]=[];
 dLists[ path ].push(value);
});
for( path in dLists )
{
 console.log(path);
 wWindow.document.write( '<h1>' + path + '</h1>' );
 wWindow.document.write( '<ul>' );
 if(dLists[path].length>0)
 {
 dLists[path].forEach(function(row){
 wWindow.document.write( '<li>'+row+'</li>' );
 });
 }else wWindow.document.write( '<li>没有文件</li>' );
 wWindow.document.write( '</ul>' );
}
wWindow.document.close();

然后,根据清单一个个手动删除吧。

当然,如果你有开通PCS权限的话,他是提供文件接口的,就可以根据这个清单自动删除了噢,具体接口还能不能用,没有尝试,所以,呵呵,自行测试呗。不过估计有点悬。