Пока цикл чтения по электронной почте

У меня проблемы со сценарием, который я пишу. Я пытаюсь контролировать свободное место на диске и иметь электронную почту, созданную для каждой файловой системы с определенным порогом. При использовании этого сценария с «echo» вместо «mail», вывод выглядит корректно для моего терминала. Когда я включаю почту, отправляется только критическое предупреждение, а тело письма включает в себя другие файловые системы. Я пытаюсь отправить отдельные письма для каждой файловой системы. Я не ищу ответа, но, возможно, определенное место, чтобы сосредоточиться, чтобы попытаться определить, в чем моя проблема.

#!/bin/bash #The following script will check filesystems (local/nfs only) #and notify via email current user if over certain threshold. #Thresholds for script to call CRITICAL=90 ALERT=70 #Gets local/nfs disk info, greps out header/tmp filesystems and awks column 1 and 5 #while read loop is enabled to parse through each line df -l | grep -vE '(^Filesystem)' | awk '{ print ($5 " " $1)}' | while read output; do #updates variables to reads current step usage=$( echo $output | awk '{print $1}' | cut -d'%' -f1 ) part=$( echo $output | awk '{print $2}' ) #if percentage matches alert or critical, email current user if [ $usage -ge $CRITICAL ]; then mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER elif [ $usage -ge $ALERT ]; then mail -s "Warning: Filesystem $part is at $usage% of capacity." $USER fi done 

  • Как поделиться сценарием GNU sed между Linux и Mac OS X
  • Как я могу отфильтровать текущий каталог ('.') В bash?
  • Сценарий оболочки выполняется по-разному на основе рабочего каталога.
  • Ошибка сценария оболочки. Невозможно передать выход из одной переменной в другую переменную.
  • shell-скрипты с большим количеством файлов - timelapse
  • Сценарий Bash для чтения файла и эха разных строк для вывода файлов
  • Как регистрировать, если переменная среды не установлена?
  • автопринятие ключа rsa в скрипте bash
  • 2 Solutions collect form web for “Пока цикл чтения по электронной почте”

    Ваша команда mail ожидает, что ее сообщение будет включено в STDIN, и поэтому читает оставшуюся часть вывода, сгенерированного вашим конвейером df ... awk .

    Если вы действительно не хотите, чтобы в вашем почтовом сообщении не было тела сообщения, просто удалите STDIN из /dev/null :

     mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER </dev/null 

    Как уже упоминалось выше, почтой требуется какая-то информация stdin или / dev / null, чтобы она не захватывала stdio.

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

     Example: mail -s "Critical Warning: Filesystem $part is at $usage% of capacity." $USER << EOM Critical Report Generated `date` Disk status: `df -h` Process Status: `top -b -n 1' EOM 
    Linux и Unix - лучшая ОС в мире.