ডিস্কের ব্যবহার 90% ছাড়িয়ে গেলে একটি সতর্কতা মেল প্রেরণের শেল স্ক্রিপ্ট


11

আমি আমার সার্ভারে একটি স্ক্রিপ্ট বাস্তবায়ন করতে চাই যা ডিস্কের ব্যবহার 90% এর উপরে চলে গেলে এবং 95% এর বেশি হয়ে গেলে দ্বিতীয় ইমেল সতর্কতা স্বয়ংক্রিয়ভাবে ইমেল সতর্কতা প্রেরণ করবে। আমার ফাইলসিস্টেম হয় abc:/xyz/abcএবং মাউন্ট পয়েন্ট /pqr

আমি এটি চেষ্টা করেছি:

ADMIN="someone@def.com" 
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

তবে আমি একটি ত্রুটি পাচ্ছি যা বলে

line 7: [: Use: integer expression expected 

উত্তর:


14

ত্রুটিটি -geসংখ্যাগত না হওয়ার একটি যুক্তির কারণে । যেহেতু $ALERTসর্বদা সংখ্যাযুক্ত, $usepতাই অপরাধী হতে হবে। আপনি আউটপুটকে পার্স করার পদ্ধতিতে বেশ কয়েকটি সমস্যা রয়েছে dhযার ফলস্বরূপ $usepসংখ্যাসূচক নয়।

ফাইল সিস্টেমগুলির দৈর্ঘ্যের উপর নির্ভর করে dhএর আউটপুটটিকে বিভিন্ন লাইনে বিভক্ত করতে পারে। আংশিক লাইনগুলি আপনার ফিল্টারে ধরা পড়বে এবং ফলস্বরূপ ডেটা তৈরি করবে। এই আচরণটি এড়াতে এবং এর থেকে বিশ্লেষণযোগ্য আউটপুট পেতে dh, -Pবিকল্পটি পাস করুন ।

এছাড়াও dfএকটি শিরোনাম রেখা মুদ্রণ করে যার ফলে আবার অযৌক্তিক ডেটা হবে।

আপনার ফিল্টারটি বেশ জটিল। আমি awk এর একক পাস ব্যবহার করতে হবে। এই বিষয়টির জন্য, আপনি awk এর ভিতরে শতাংশের উপর ফিল্টারিং করতে পারেন (তবে আমি এটি নিম্নলিখিত স্ক্রিপ্টে করিনি)।

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প্রথম লাইনের সাথে মেলে, তাই NR==1 {next}প্রথম লাইনটি এড়িয়ে যায়। পরবর্তী কয়েকটি লাইনগুলি কিছু ফাইল সিস্টেমগুলি বাদ দেয় (নোট করুন যে আপনার বিবরণটি আপনাকে আগ্রহী বলে মন্তব্য করে abc:/xyz/pqrতবে আপনার কোড এটিকে বাদ দেয়)। শেষ খালি লাইনটি %মুদ্রণের আগে শতাংশ কলাম থেকে মুছে ফেলে ।

সমস্ত ফাইল সিস্টেম সম্পর্কে একটি একক মেল প্রেরণা ভাল হবে। এবার আমি বিশ্লেষণে সব বিশ্লেষণ করছি।

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 

6

যদি আপনি% d ব্যবহার করে মুদ্রণটিকে মুদ্রণফাতে পরিবর্তন করেন তবে শতাংশটি পূর্ণসংখ্যায় পরিণত হবে। চেষ্টা করুন:

printf("%d", $5);

যা 91% এ 91 এ রূপান্তর করবে। সুতরাং চূড়ান্ত আদেশটি হ'ল:

df -H | grep /dev/xvde1 | awk '{ printf "%d", $5}'

উপরের কমান্ডটি ইংরেজিতে: "মানব পাঠযোগ্য বিন্যাসে ডিস্কের স্থান ব্যবহার করুন gre আমাদের যে ডিস্কটি দেখতে চান তার উপর গ্রেপ দিয়ে ফিল্টার করুন that স্থানটি (খালিগুলি মুছে ফেলা হয়েছে) দ্বারা সীমাবদ্ধ 5th ম শব্দটি আঁকতে এবং মুদ্রণের জন্য সেই লাইনটি পাইপ করুন এবং বিন্যাস করুন একটি পূর্ণসংখ্যা হিসাবে ফলাফল স্ট্রিং .আমার জন্য কমান্ডটি পূর্ণসংখ্যা ফেরত দেয় 78যার অর্থ ডিস্কটি 78% পূর্ণ full


3
$ df | tail +2 | sed s/%//g | awk '{ if($5 > 90) print "Alert "$0;}'
  • df | tail +2 প্রথম 2 লাইন এড়িয়ে যাওয়ার পরে সমস্ত আউটপুট নেয়
  • sed s/%//g স্ট্রিপ শতাংশ লক্ষণ
  • awk ... আউটপুটে 5 তম ক্ষেত্র যদি 90 এর চেয়ে বেশি নম্বর হয় তবে "সতর্কতা ..." মুদ্রণ করে

1
স্ট্যাক এক্সচেঞ্জে স্বাগতম! আমরা দীর্ঘ উত্তর খুঁজছি যা কিছু ব্যাখ্যা এবং প্রসঙ্গ সরবরাহ করে। শুধু একটি লাইনের উত্তর দেবেন না; এটি কীভাবে কাজ করে তা ব্যাখ্যা করুন। ব্যাখ্যাগুলি অন্তর্ভুক্ত না করে এমন উত্তরগুলি সরানো হতে পারে।
জি-ম্যান বলছেন 'মনিকাকে পুনঃস্থাপন করুন'

0

আমার রূপটি এখানে:

#!/bin/bash

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

0

আমি উপরের গিলস উত্তর সম্পর্কে মন্তব্য করতে সক্ষম নই, তবে কেবল সচেতন থাকুন যে দ্বিতীয় স্থানটিতে স্ট্রিং-ভিত্তিক তুলনা করা হচ্ছে, যেখানে:

$5 >= ALERT

আমি যখন এটি সিঙ্গেল ডিজিটের প্রান্তিক পরীক্ষা করছিলাম তখন আমি এটি লক্ষ্য করেছি। আপনি +0 ব্যবহার করে একটি কাস্টটিকে বাধ্যতামূলক করতে পারেন, সুতরাং তুলনাটি হয়ে যায়:

$5+0 >= ALERT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.