Как проверить правильность работы долгого времени? (Как запустить функцию после заданного времени во время выполнения команды)?Как проверить правильность работы долгого времени?/Как запустить функцию после заданного времени во время выполнения команды?
Я пишу скрипт bash для загрузки некоторых файлов регулярно. Я хочу сообщить, когда начата успешная загрузка.
Но я не мог исправить это.
#!/bin/bash
URL="http://testurl"
FILENAME="/tmp/test"
function is_downloading() {
sleep 11
echo -e "$DOWNLOADING" # 0 wanted here with a failed download but always get empty
if [[ $DOWNLOADING -eq 1 ]]; then
echo "Send Message"
# send_msg
fi
}
while [[ 0 ]]; do
is_downloading &
DOWNLOADING=1
curl --connect-timeout 10 --speed-time 10 --speed-limit 1 --location -o "$FILENAME" "$URL"
DOWNLOADING=0
echo -e "$DOWNLOADING"
sleep 3600
done
Спасибо. И вот некоторые ссылки для $ 0 и $$, правильно? https://stackoverflow.com/questions/29258603/what-do-0-1-2-mean-in-shell-script https://stackoverflow.com/questions/78493/what-does-mean-in- the-shell То, что я не могу понять, это убить% 1 и rm-канал после мертвой петли. – Al3n
'kill' в конце уничтожит задание' is_downloading', так как оно находится в бесконечном цикле. «% 1» - это текущий номер задания фона - вам не нужен его pid. Но из-за бесконечного цикла он не получит его. Как выйти из этого? Ctrl + C? Если хотите, мы можем обработать сигнал. – cdarke
Еще одна вещь: нужно ли вы называть эту функцию на каждой итерации цикла? Я думаю, было бы лучше, если бы он был вызван один раз перед циклом. См. Правки. – cdarke