1 需求: 之前用xxljob做调度,在java代码写的逻辑,有时候逻辑改的时候代码要重新发版,所以改成shell脚本
2 在对应发服务器部署执行器,我们一般是哪个服务调用xxljob 就用哪个服务对应的服务器做执行器
3 创建任务 可以传递参数 比如我传递的是8 就代表删除8天前的数据
4 编写shell脚本
#!/bin/bash
echo "xxl-job: hello shell"
echo "脚本位置:$0"
echo "任务参数:$1"
echo "分片序号 = $2"
echo "分片总数 = $3"
#脚本的日志文件路径
CLEAN_LOG_DIR="/usr/local/xxl-job/sh"
CLEAN_LOG="/usr/local/xxl-job/sh/clean_es_log.log"
#创建日志文件目录
if [ ! -d ${CLEAN_LOG_DIR} ];then
mkdir -p ${CLEAN_LOG_DIR}
fi
#创建日志文件
if [ ! -f ${CLEAN_LOG} ];then
touch ${CLEAN_LOG}
fi
#删除多少天以前的日志,假设输入8,意味着8天前的日志都将会被删除
DELDATE=$(date -d "$1 day ago" +%Y-%m-%d\ %H:%M:%S)
#转为时间戳
timeStamp=`date -d "$DELDATE" +%s`
#将DELDATE转换为时间戳,精确到毫秒
currentTimeStamp1=$((timeStamp*1000+10#`date "+%N"`/1000000))
echo "-------毫秒值【 $currentTimeStamp1 】 -------"
echo "-------现在查询【 $DELDATE 】之前成功的回调日志 -------"
#将日志输入到服务器做备份
echo "-------现在查询【 $DELDATE 】之前成功的回调日志 -------" >>${CLEAN_LOG}
echo "------开始删除推送成功日志,索引【 xxx】-------"
deletedata=$(curl -XPOST "http://xxxx/xxx/_delete_by_query" -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": [{
"term": {
"st": {
"value": "true",
"boost": 1.0
}
}
},
{
"terms": {
"t": [
4,
6,
3,
8,
5,
7,
8,
9,
10,
11,
12
],
"boost": 1.0
}
},
{
"range": {
"endTime": {
"from": null,
"to": '${currentTimeStamp1}',
"include_lower": true,
"include_upper": true,
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}')
echo "------打印删除推送成功日志【 $deletedata 】-------"
echo "------打印删除推送成功日志【 $deletedata 】-------" >>${CLEAN_LOG}
# 解析json 正则
total=`echo $deletedata |grep -Po 'total[" :]+\K[^,"]+'`
echo "此次共{$total}条成功推送数据"
count=`echo $deletedata |grep -Po '"deleted[" :]+\K[^,"]+'`
echo "此次共删除{$count}条成功推送数据"
exit 0
服务器没有安装python 也懒得到网上找解析json的脚本,json比较简单直接用的正则表达式
5 执行xxljob ,数据删除成功