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

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

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 
  • Как grep для одной строки, но несколько файлов одновременно?
  • Как использовать GNU Parallel для этого цикла while?
  • Когда «если» не нужно?
  • Передача значений в скрипт
  • как редактировать двуязычный текст с помощью скриптов?
  • Как я могу запускать команду периодически и неограниченно, пока она не отключится?
  • Почему suid бит не влияет на сценарий оболочки или perl?
  • Сценарий оболочки Loop, если входной файл имеет больше входных данных
  • Выполнить сложные команды по сценарию bash
  • Как удалить файлы с другого сервера с помощью сценария оболочки
  • Быстро проверьте, работают ли многие сетевые хосты
  • Linux и Unix - лучшая ОС в мире.