Время восстановления для определенной команды в bash

#bash #raspberry-pi

#bash #raspberry-pi

Вопрос:

Я пишу сценарий оболочки (#!/bin / sh) для моего RPI, который отправляет электронные письма всякий раз, когда датчик измеряет значение выше определенного градуса Цельсия.

Поскольку датчики срабатывают каждую минуту для ведения журнала, температура выше 30 градусов в течение примерно часа разрешилась бы за 60 сообщений электронной почты, чего я не хочу.

Есть ли способ установить время восстановления для команды, которая отправляет почту?

Вот код, который проверяет данные датчика и отправляет почту, если температура выше 30 градусов (это решается с помощью функций, но я думаю, что это не имеет значения):

 if [ $tempC -ge 40 ]
then
  #logging code
  mailSend "WARNING: Temperature is currently: $temp and Humidity is: ${file#"sensor_dhtH"}" #This command needs a cooldown
elif [ $tempC -ge 30 ]
then
  #logging code
  mailSend "Attention: Temperature is currently: $temp and Humidity is: ${file#"sensor_dhtH"}" #This command needs a cooldown
else
  #logging code
fi
  

Заранее спасибо 🙂

Комментарии:

1. Просто. Всякий раз, когда вы действительно отправляете письмо, сохраняйте переменную, записывающую время последнего письма, например, tolm=$SECONDS Затем, всякий раз, когда вы собираетесь отправить новое письмо, вычисляйте ((elapsed=SECONDS-tolm)) и не отправляйте его, если elapsed оно не превышает некоторого порога.

Ответ №1:

Хорошо, благодаря @Mark Setchell я смог найти это решение:

 limit=$((2*60*60)) #limit is 2 hours

if [ $SECONDS -ge $limit ] #if seconds-since-last-send greater or equal to your-set-limit(here 2h)
then
#send the mail
SECONDS=0 #set the seconds-since-last-send to 0
else
echo "not yet ma man, wait some seconds" #not sending the mail cuz its too early to send another
fi
  

Я раньше не знал о переменной $ SECONDS, которая сама себя подсчитывает, так что это, безусловно, было полезно, спасибо 🙂

Комментарии:

1. $ SECONDS существует только в bash, поэтому, если у кого-то есть решение, которое также работает в sh, это было бы здорово!