শরীর খালি না হলে কমান্ড লাইন থেকে মেল পাঠানো


12

আমি একটি সাধারণ স্ক্রিপ্ট লিখতে চাই যা কোনও লগ পরিবর্তন হলে আমাকে সতর্ক করে দেয়। এটির জন্য আমি আগ্রহী এমন লাইনগুলি খুঁজে পেতে গ্রেপ ব্যবহার করছি Right এখনই এটি এটির মতো কাজ করে:

grep line /var/log/file | mail -s Log email@domain.tld

সমস্যাটি হ'ল কোনও মেলানো লাইন না পাওয়া গেলেও এটি একটি মেল পাঠায়। মেলুটিলগুলি থেকে প্রাপ্ত মেল ইউটিলিটিতে মনে হয় কোনও খালি শরীর আছে এমন মেলগুলি ফেলে দেওয়ার জন্য এটি বলে কোনও সুইচ নেই।

এটি করার কি কোনও দ্রুত এবং সহজ উপায় আছে?

উত্তর:


12
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld

অথবা আপনি এটিকে ক্রোন জব করতে পারেন এবং তারপরে যদি এটি কোনও আউটপুট উত্পাদন করে তবে এটি ব্যবহারকারীদের ইমেল করবে। আপনি বাক্সে ঠিকানায় মেইল ​​প্রেরণের জন্য / ইত্যাদি / উপকরণ ফাইলটি সম্পাদনা করতে পারেন (এবং তারপরে নতুনালিয়াস কমান্ড চালান)।

ক্রোন প্রবেশের পূর্বে (আপনি বিষয়টির লাইনটি সেট করতে সক্ষম হবেন না

1 0 * * *  grep line /var/log/file

অথবা আপনি ifne ইউটিলিটি পেতে পারেন - এটি সম্ভবত আপনি চান

গ্রেপ লাইন / var / লগ / ফাইল | ifne মেল -s লগ করুন email@domain.tld

Ifne কমান্ড এটি সেন্টোস এবং আরএইচইএল এর ইপেল রেপো থেকে আয়েলাবে। আমি অনলাইনে ম্যান পৃষ্ঠার লিঙ্কটি খুঁজে পাচ্ছি না তবে এটি রয়েছে

ifne (1)
ifne (1)

NAME ifne - স্ট্যান্ডার্ড ইনপুট ফাঁকা না থাকলে কমান্ড রান করুন

SYNOPSIS ifne [-n] কমান্ড

বর্ণনা ifne নীচের কমান্ডটি চালায় যদি এবং কেবল যদি স্ট্যান্ডার্ড ইনপুট খালি না থাকে।

বিকল্প -n বিপরীত অপারেশন। স্ট্যান্ডার্ড ইনপুটটি নিরাপদ হলে কমান্ডটি চালান।

          Note  that  if  the  standard  input  is not empty, it is passed
          through ifne in this case.

উদাহরণ খুঁজে। -নাম কোর | ifne মেল-গুলি "মূল ফাইলগুলি পাওয়া গেছে" মূল

জাভির মেরিনো কর্তৃক লেখক কপিরাইট ২০০৮

   Licensed under the GNU GPL

                              2008-05-01                           ifne(1)

2
নোট করুন যে গ্রেপটি যদি আউটপুট উত্পন্ন না করে তবে 0-0-এ প্রস্থান করবে, সুতরাং আপনি এটি করতে পারেন: আউটপুট = $ (গ্রেপ লাইন / ভার / লগ / ফাইল) এবং & প্রতিধ্বনি "cho আউটপুট" | মেল-গুলি লগ user@example.com
সান রিফসচিনিডার

এছাড়াও, আপনার প্রস্তাবিত কমান্ড মেল কমান্ডে "$ আউটপুট" প্রেরণ করে না। :-)
শান রিফশনিডার

আমি উত্তরটি সম্পাদনা করার পরামর্শ দেব @ সিয়ান রিফসনিডারের প্রস্তাবিত সমাধানটি অন্তর্ভুক্ত করার জন্য
বেসিল

উবুন্টুতে প্যাকেজে এফওয়াইআই ifneপাওয়া যায় moreutils। দুর্ভাগ্যক্রমে এই প্যাকেজটি প্যাকেজ থেকে কমান্ডের parallelসাথে বিরোধ সৃষ্টি করে । parallelparallel
আর্টফুলবোট

14

"ম্যান মেল" আমাকে বলে যে আর্গুমেন্ট -E শরীর শূন্য থাকলে মেলগুলি প্রেরণ বন্ধ করে। আমার জন্য ভাল কাজ করে।

-E

যদি কোনও বহির্মুখী বার্তাটি তার প্রথম বা একমাত্র বার্তার অংশে কোনও পাঠ্য না থাকে, তবে তা প্রেরণ করবেন না তবে নীরবে এটি বাতিল করুন, কার্যকরভাবে প্রোগ্রামের সূচনায় স্কাইপ্যাম্পেবাডি পরিবর্তনশীলকে সেট করে। ক্রোন দ্বারা শুরু করা স্ক্রিপ্টগুলি থেকে বার্তা প্রেরণের জন্য এটি কার্যকর (8)।


3
উবুন্টু 12.04-এ, জিএনইউ মেলটুলস ২.১ ইনস্টল করা আছে, এবং "মেল" এর জন্য "-E" বিকল্পটি --exec এর জন্য একটি শর্টহ্যান্ড রয়েছে। এটিতে একটি "খালি শরীর" বিকল্প নেই।
মার্ক স্টোসবার্গ

3
@ মার্কস্টোসবার্গ: উবুন্টুতে একাধিক বিকল্প প্যাকেজ রয়েছে যা একটি আদেশ mailবা mailxআদেশ দেয়। bsd-mailxএবং heirloom-mailxপ্যাকেজ উভয় একটি প্রদান mailxসঙ্গে -Eবিকল্প এখানে বর্ণিত।
স্মাইলার্স

1
CentOS 6.5 এ আমার জন্য কাজ করেছেন:grep "find me" /var/log/something | mail -s "That text you were looking for is now in the logs" -E mail@example.com
user2208096

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