Отправка оповещения по электронной почте, если время для команды curl превышает 1 сек.

Я пытаюсь написать одну строку для отправки электронного письма с предупреждением, если время, затраченное на команду curl, превышает 1 сек.

if time curl {URI} > 1; then mailx -r me@domain.tld -s ALERT; fi

Как с команда time возвращает больше, чем просто числовое значение, это терпит неудачу.

Есть идеи, как мне этого добиться?

0
задан 8 May 2018 в 21:42

3 ответа

Я сохранил бы 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
1
ответ дан 29 October 2019 в 09:17

От вида этого результат завихрения, кажется, не имеет значения.

Таким образом, я предлагаю уничтожить команду, если она охватывает больше чем одну секунду при помощи тайм-аута. Вот острота:

timeout 1s curl {URI} || mailx -r me@domain.tld -s ALERT

Если это тайм-ауты, это возвращает ошибку, и команда mailx выполняется.

Нет протестированный, но это должно работать.

1
ответ дан 29 October 2019 в 09:17

Завихрение имеет опцию для этого, - макс. разовый (и - время соединения, если Вы хотите управлять временем, тратят в фазе подключения на сессию). Если тайм-аут произойдет, то завихрение возвратит код ошибки 28.

Так что-то вроде этого:

curl --max-time 60 <URL>
if [ $? -eq 28 ]
then 
  mailx -r me@domain.tld -s ALERT
fi

должен сделать это.

Я нашел этот сайт Всем Завихрение, которое описывает возможности Завихрения.

1
ответ дан 29 October 2019 в 09:17

Другие вопросы по тегам:

Похожие вопросы: