Поскольку я использую возможность для установки задач 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.
Это интересно в ... но не indempotent. Результат будет различным каждый раз –