GNU/Linux >> Belajar Linux >  >> Linux

Script Shell Untuk Mengirim Surat Peringatan Jika Penggunaan Disk Melebihi 90%?

Saya ingin menerapkan skrip di server saya yang secara otomatis akan mengirim peringatan email jika penggunaan disk melebihi 90% dan peringatan email kedua ketika melebihi 95%. Sistem file saya adalah abc:/xyz/abc dan titik pemasangannya adalah /pqr .

Saya sudah mencoba ini:

ADMIN="[email protected]" 
ALERT=90 
df -H | grep -vE 'abc:/xyz/pqr | tmpfs |cdrom' | awk '{ print $5 " " $1 }' | while read output; do 
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) 
  partition=$(echo $output | awk '{ print $2 }' ) 
    if [ $usep -ge $ALERT ]; then 
      mail -s "Alert: Almost out of disk space $usep" $ADMIN 
    fi 
  done

Tapi saya mendapatkan pesan kesalahan yang mengatakan

line 7: [: Use: integer expression expected 

Jawaban yang Diterima:

Kesalahan ini disebabkan oleh salah satu argumen ke -ge tidak bersifat numerik. Sejak $ALERT selalu numerik, $usep harus menjadi pelakunya. Ada beberapa masalah dengan cara Anda mengurai output dh yang menghasilkan $usep bukan numerik.

Bergantung pada panjang sistem file, dh dapat membagi outputnya pada beberapa baris. Garis parsial akan ditangkap dalam filter Anda dan menghasilkan data yang tidak masuk akal. Untuk menghindari perilaku ini dan mendapatkan keluaran yang dapat diuraikan dari dh , berikan -P pilihan.

Juga df mencetak baris header yang lagi-lagi akan menghasilkan data yang tidak masuk akal.

Filter Anda cukup rumit. Saya akan menggunakan satu pass awk. Untuk itu, Anda bisa melakukan penyaringan pada persentase di dalam awk (tapi saya belum melakukannya di skrip berikut).

df -H | awk '
    NR == 1 {next}
    $1 == "abc:/xyz/pqr" {next}
    $1 == "tmpfs" {next}
    $1 == "/dev/cdrom" {next}
    1 {sub(/%/,"",$5); print $1, $5}
' | while read filesystem percentage; do
    if [ "$percentage" -ge "$ALERT" ]; then 
      mail -s "Alert: Almost out of disk space ($usep%) on $filesystem" "$ADMIN"
    fi 
  done

NR==1 cocok dengan baris pertama, jadi NR==1 {next} melewatkan baris pertama. Beberapa baris berikutnya mengecualikan beberapa sistem file (perhatikan bahwa deskripsi Anda mengatakan bahwa Anda tertarik dengan abc:/xyz/pqr , tetapi kode Anda mengecualikannya). Baris awk terakhir menghapus % dari kolom persentase sebelum mencetaknya.

Akan lebih baik untuk mengirim satu email tentang semua sistem file. Kali ini saya melakukan semua analisis dalam awk.

message=$(df -h | awk -v ALERT="$ALERT" '
    NR == 1 {next}
    $1 == "abc:/xyz/pqr" {next}
    $1 == "tmpfs" {next}
    $1 == "/dev/cdrom" {next}
    1 {sub(/%/,"",$5)}
    $5 >= ALERT {printf "%s is almost full: %d%%n", $1, $5}
')
if [ -n "$message" ]; then
  echo "$message" | mail -s "Alert: Almost out of disk space" "$ADMIN"
fi 

Linux
  1. Kirim email dari terminal atau skrip linux menggunakan perintah email

  2. Menentukan Jalur Ke Skrip Shell Bersumber?

  3. Script Shell Hang Pada Perintah Mail?

  1. Arti dari $? Dalam Skrip Shell?

  2. Script Atau Program Untuk Mencatat Penggunaan Disk?

  3. Dapatkan penggunaan CPU dalam skrip shell?

  1. Mengirim email dari skrip shell linux

  2. Menghitung persentase pembulatan dalam Shell Script tanpa menggunakan bc

  3. Skrip transliterasi untuk shell linux