1.场景
我需要传入多个参数,在执行任务时传入的任务参数用逗号隔开,到shell中都被$1
当做字符串接收到了,没办法,只能在shell中截取字符串,截成多个参数。
2.编辑入参
CRON:0 0 0 1 * ? #每月1号0点执行
点击“任务管理”->“操作”->“编辑”->“任务参数”:afp,date +%Y%m,/opt/app/software/xxl_job/file/event2esMapping.json
注意:date +%Y%m,不能加${}
3.编辑shell脚本
点击“任务管理”->“操作”->“GLUE IDE”
#!/bin/bash
echo "xxl-job: 每月定时创建索引"echo "脚本位置:$0"
echo "任务参数:$1"
echo "分片序号:$2"
echo "分片总数:$3"#关键代码---开始
PARAMS_STR=$1
OLD_IFS=$IFS
IFS=','
read -ra params <<< "$PARAMS_STR"
IFS=$OLD_IFS
PARAM1=${params[0]}
PARAM2=${params[1]}
PARAM3=${params[2]}#注意`${PARAM2}`的着重标记单引号不能省略,不然就变成:afp_date +%Y%m
INDEX_NAME=${PARAM1}_`${PARAM2}`
#INDEX_NAME的最终值为:afp_202402
echo "index_name is $INDEX_NAME"
#关键代码---结束ES_NODES=("http://192.168.1.1:9200" "http://192.168.1.2:9200" "http://192.168.1.3:9200")
for node in "${ES_NODES[@]}"
doecho "在 $node 节点创建索引 $INDEX_NAME!"curl -X PUT "$node/$INDEX_NAME" -H 'Content-Type: application/json' -d @${PARAM3}
doneecho "Good Bye!"
exit 0
4.扩展
event2esMapping.json
{"settings": {"number_of_shards": "12","number_of_replicas": 1},"mappings": {"properties": {"ID": {"type": "keyword"},"NAME": {"type": "keyword"},"TIME": {"type": "long"},"CREATE_TIME": {"type": "date"},"VALID": {"type": "integer"}}}
}