基于字符串生成剩余相同的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

回到顶部