Я пытаюсь написать одну строку для отправки электронного письма с предупреждением, если время, затраченное на команду curl, превышает 1 сек.
if time curl {URI} > 1; then mailx -r me@domain.tld -s ALERT; fi
Как с команда time возвращает больше, чем просто числовое значение, это терпит неудачу.
Есть идеи, как мне этого добиться?
Я сохранил бы PID curl
процесс, sleep
секунда и просто тестирует, работает ли она все еще с kill
:
curl … &
pid=$!
sleep 1
if kill -0 $pid &>/dev/null; then
mailx -r me@domain.tld -s ALERT
fi
Можно протестировать это легко с sleep 1
или sleep 2
соответственно:
$ sleep 1 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27520
[1]+ Done sleep 1
$ sleep 2 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27599
running
От вида этого результат завихрения, кажется, не имеет значения.
Таким образом, я предлагаю уничтожить команду, если она охватывает больше чем одну секунду при помощи тайм-аута. Вот острота:
timeout 1s curl {URI} || mailx -r me@domain.tld -s ALERT
Если это тайм-ауты, это возвращает ошибку, и команда mailx выполняется.
Нет протестированный, но это должно работать.
Завихрение имеет опцию для этого, - макс. разовый (и - время соединения, если Вы хотите управлять временем, тратят в фазе подключения на сессию). Если тайм-аут произойдет, то завихрение возвратит код ошибки 28.
Так что-то вроде этого:
curl --max-time 60 <URL>
if [ $? -eq 28 ]
then
mailx -r me@domain.tld -s ALERT
fi
должен сделать это.
Я нашел этот сайт Всем Завихрение, которое описывает возможности Завихрения.