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

У меня проблемы со сценарием, который я пишу. Я пытаюсь контролировать свободное место на диске и иметь электронную почту, созданную для каждой файловой системы с определенным порогом. При использовании этого сценария с «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 

  • Что не так с моими заявлениями elif в этой игре с ножницами из каменной бумаги, которую я делаю
  • При чтении из файла выберите конкретные поля и сравните их с другим файлом в Unix bash?
  • Восстановить скрипт корзины не работает
  • как выполнить программу python в сценарии оболочки
  • Как скопировать все файлы пользователей .bash_history в мой домашний каталог?
  • целочисленное выражение ожидается bash
  • Старый скрипт удаления файла
  • Сценарий Stop 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 - лучшая ОС в мире.