Random 基于字符串生成保持相同的cron值

Random 基于字符串生成保持相同的cron值,random,cron,ansible,Random,Cron,Ansible,由于我使用ansible设置cron任务,并且我希望避免在所有服务器上同时运行相同的任务,因此我正在寻找一种优雅的解决方案,通过在重新运行ansible角色时保持不确定性来“随机”生成cron 我制作了以下工作脚本: #!/bin/bash if [ $# -lt 1 ] then echo "Syntax error : at least one argument is needed" echo "Syntax: $0 string [ -hmbf ]" echo "-

由于我使用ansible设置cron任务,并且我希望避免在所有服务器上同时运行相同的任务,因此我正在寻找一种优雅的解决方案,通过在重新运行ansible角色时保持不确定性来“随机”生成cron

我制作了以下工作脚本:

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "Syntax error : at least one argument is needed"
    echo "Syntax: $0 string [ -hmbf ]"
    echo "-h : display only the hour"
    echo "-m : display only the minute"
    echo "-b : display both hour and minute"
    echo "-f : display both hour and minute in cron format"
    exit
fi

case $2 in
    -h|--hour)
    onlyhour=true
    ;;
    -m|--minute)
    onlyminute=true
    ;;
    -b|--both)
    bothhourminute=true
    ;;
    -f|--full)
    fullcron=true
    ;;
    *)
            # unknown option
    ;;
esac

n=$(md5sum <<< "$1")
number=$((0x${n%% *}))
number=${number#-}

position=0
while [  $position -lt ${#number} ]; do
        onenumber=${number:$position:1}
        twonumber=${number:$position:2}
        if [[ $onenumber -ge 0 && $onenumber -le 6 && -z ${hour+x} ]]; then hour=$onenumber; fi
        if [[ $twonumber -ge 0 && $twonumber -le 59 && -z ${minute+x} ]]; then minute=$twonumber; fi
        let position=position+1
        if [[ -n "$hour" && -n "$minute" ]]
                then
                        if [ "$onlyhour" = true ] ; then
                                echo $hour
                                exit 0
                        elif [ "$onlyminute" = true ] ; then
                                echo $minute
                                exit 0
                        elif [ "$fullcron" = true ] ; then
                                echo $minute $hour '* * *'
                                exit 0
                        else
                                echo $minute $hour
                                exit 0
                        fi
        fi
done
#/bin/bash
如果[$#-lt 1]
然后
echo“语法错误:至少需要一个参数”
echo“语法:$0字符串[-hmbf]”
回声“-h:仅显示小时”
回声“-m:仅显示分钟”
echo“-b:同时显示小时和分钟”
echo“-f:以cron格式显示小时和分钟”
出口
fi
案件二元
-h(小时)
onlyhour=正确
;;
-m |——分钟)
onlyminute=true
;;
-b |——两者都有)
两个小时分钟=真
;;
-f |——满)
fullcron=true
;;
*)
#未知选项
;;
以撒

n=$(md5sum使用ansible
cron
模块和随机值

- cron: name='JOB_NAME' job="JOB" minute={{ 59 |random }} hour={{ 4 |random(start=3) }}

这将创建cron作业,它的分钟在范围(0-59)内,小时在范围(3-4)内

- cron: name='JOB_NAME' job="JOB" minute={{ 59 |random }} hour={{ 4 |random(start=3) }}

这将创建cron作业,它的分钟在范围(0-59)内,小时在范围(3-4)内

幂等
cron
任务,时间由
inventory\u主机名
播种:

- cron:
    name: myjob
    job: myscript.sh
    minute: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 60 }}"
    hour: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 24 }}"

幂等元
cron
任务,时间由
inventory\u主机名播种

- cron:
    name: myjob
    job: myscript.sh
    minute: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 60 }}"
    hour: "{{ ( inventory_hostname | hash | list | map('int',0,16) | sum ) % 24 }}"

从Ansible 2.3版开始,还可以从种子初始化随机数生成器。这样,您可以创建随机但幂等数:


{{59 | random(seed=inventory_hostname)}****root/script/from/cron

从Ansible 2.3版开始,还可以从seed初始化随机数生成器。这样,您可以创建随机但幂等数:


{{59 | random(seed=inventory_hostname)}****root/script/from/cron

我非常喜欢这个选项,“随机性”是确定性的,因此Ansible不会一直更改文件。如果您需要映射到较短的小时范围(即“凌晨2点到凌晨5点”),请将“%24”替换为“%3”然后将2添加到结果中。我非常喜欢此选项-“随机性”是确定性的,因此Ansible不会一直更改文件。如果需要映射到较短的小时范围(即“凌晨2点到凌晨5点”),请将“%24”替换为“%3”然后在结果中添加2。这是相互测试…但不是不可测的。每次的结果都会不同。这是相互测试…但不是不可测的。每次的结果都会不同。现在Ansible 2.3出来了,这应该是推荐的方式。谢谢!现在Ansible 2.3出来了,这应该是推荐的方式好的,谢谢你!