基于字符串生成剩余相同的cron值
由于我使用ansible来设置cron任务,因为我想避免在所有服务器上同时运行完全相同的任务,所以我正在寻找一个优雅当我重新扮演我的角色时,通过保持独立性来“随机”生成cron的解决方案。基于字符串生成剩余相同的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
的想法是调用脚本,并给服务器名作为参数。
我仍然不相信我自己的解决方案。有没有更好的方法来做到这一点?我正在寻找Ansible中直接可用的东西。
回答:
使用ansible cron
模块随机值
- cron: name='JOB_NAME' job="JOB" minute={{ 59 |random }} hour={{ 4 |random(start=3) }}
这将创建一个cron作业是分在范围内(0-59)和时间范围内(3-4)
回答:
幂cron
任务,与播种时间:
- 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 |随机(种子= inventory_hostname)}} * * * *根/脚本/从/ cron的
以上是 基于字符串生成剩余相同的cron值 的全部内容, 来源链接: utcz.com/qa/258737.html