Saya mengalami masalah yang agak aneh, saya menjalankan skrip (Bash) di beberapa server dan berhenti bekerja di salah satu server (berfungsi dengan baik di semua server lain).
Inilah bagian masalah dari skrip:(Saya tidak menulisnya sendiri, semua kredit masuk ke "Kaya") (http://www.notrainers.org/monitoring-memory-usage-on-linux-with-nagios- dan-nrpe/)
if [ "$result" -lt "$warn_level" ]; then #Line 56
echo "Memory OK. $result% used."
exit 0;
elif [ "$result" -ge "$warn_level" ] && [ "$result" -le "$critical_level" ]; then #Line 59
echo "Memory WARNING. $result% used."
exit 1;
elif [ "$result" -gt "$critical_level" ]; then #Line 62
echo "Memory CRITICAL. $result% used."
exit 2;
fi
Pesan kesalahan lengkap:
./check_memory.sh: Line 56: [: 7.: integer expression expected
./check_memory.sh: Line 59: [: 7.: integer expression expected
./check_memory.sh: Line 62: [: 7.: integer expression expected
Jika Anda memerlukan info lebih lanjut, beri tahu saya dan saya akan mencoba menyediakannya secepat mungkin.
Hargai semua masukan
Jawaban yang Diterima:
Dari tautan yang Anda berikan, saya melihat baris di bawah ini.
result=$(echo "$used / $total * 100" |bc -l|cut -c -2)
Sesuai komentar @Graeme, ubah baris di atas menjadi di bawah.
result=$(echo "$used / $total * 100" |bc -l)
Sekarang, setelah menambahkan baris di atas, kita harus mengubah output dari result
ke bilangan bulat seperti di bawah ini.
result1=${result/.*}
Saya kira di salah satu mesin di mana kesalahan terjadi, output ini bukan bilangan bulat. Cukup ubah output dari hasil menjadi integer sehingga Anda dapat menangani kasus seperti itu. Tambahkan baris di bawah ini setelah Anda menghitung result
.
result1=${result/.*}
Dan bukannya result
ubah nama variabel sebagai result1
di dalam if
loop, dan kesalahan tidak akan terjadi.
Saya menduga, cut -c -2
atribut kesalahan sebagian besar karena memotong 2 karakter pertama saja. Bagaimana jika hasil hanya memiliki satu karakter? Misalkan jika hasilnya 1.23456
, potongan di atas akan menghasilkan 1.
sebagai nilai untuk result
yang jelas merupakan penyebab dari integer expected
kesalahan.
Alasan itu berfungsi dengan baik di server yang tersisa adalah karena tidak menemukan kasus di mana result
variabel hanya memiliki satu digit. Sangat mungkin untuk gagal di server yang tersisa juga jika hasilnya adalah variabel satu digit (sesuatu seperti yang saya sebutkan dalam contoh di atas).