Random 基于字符串生成保持相同的cron值
由于我使用ansible设置cron任务,并且我希望避免在所有服务器上同时运行相同的任务,因此我正在寻找一种优雅的解决方案,通过在重新运行ansible角色时保持不确定性来“随机”生成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 "-
#!/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使用ansiblecron
模块和随机值
- 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出来了,这应该是推荐的方式好的,谢谢你!