Skip to content

Instantly share code, notes, and snippets.

@vdakalov
Created April 3, 2017 15:36
Show Gist options
  • Save vdakalov/8a71cce915f2e5a5560062073e238781 to your computer and use it in GitHub Desktop.
Save vdakalov/8a71cce915f2e5a5560062073e238781 to your computer and use it in GitHub Desktop.
Цикличное выполнение команды
#!/usr/bin/env bash
command_timeout=$1
command_line=$2
command_next=$3
timeout="${command_timeout}"
logname="/tmp/run.$(date +%Y%m%d%H%M%S).log"
function hasNext {
if [ -z "${command_next}" ]; then
echo 1
else
bash -c "${command_next}"
fi
}
function run {
bash -c "${command_line}" |& tee "${logname}"
}
echo "Файл лога ${logname}"
all_ts=$(date +%s)
circles=1
while true; do
if $(hasNext); then
ts_sec=$(date +%s)
ts=$(date +%H:%M:%S)
echo -e "\e[1mЗапуск команды №${circles} время ${ts}\e[0m"
echo -e "command: \e[37m${command_line}\e[0m"
echo -e "test: \e[37m${command_next}\e[0m"
echo "-------------------------"
echo
run
diff=$(($(date +%s) - ${ts_sec}))
echo
echo "-------------------------"
echo -e -n "Продолжительность выполнения "
printf '%02d:%02d:%02d\n' $((${diff}/3600)) $((${diff}%3600/60)) $((${diff}%60))
fi
if ! $(hasNext); then
break
else
local_timeout=${timeout}
while [[ ${local_timeout} -gt 0 ]]; do
echo -e -n "\e[2K\rТаймаут ${local_timeout} секунд..."
local_timeout=$((${local_timeout}-1))
sleep 1
done
echo -e "\e[2K\n"
circles=$((${circles} + 1))
fi
done
all_diff=$(($(date +%s) - ${all_ts}))
echo -e -n "\nОбщая продолжительность "
printf '%02d:%02d:%02d\n' $((${all_diff}/3600)) $((${all_diff}%3600/60)) $((${all_diff}%60))
@vdakalov
Copy link
Author

vdakalov commented Apr 3, 2017

circle.sh 5 "echo Hello" "[[ $(date +%M) -gt 40 ]] && echo 1 || echo 0"

Каждые пять секунд печатать Hello, до тех пор пока кол-во минут на часах больше чем 40

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment