লেজ - ইভেন্টে বীপ কিভাবে


14

আমি চাই আমার পিসি প্রতিটি লেজের ইভেন্টগুলিতে একটি সিস্টেম বীপ তৈরি করে

আমি নিম্নলিখিত আদেশ আছে

tail -f development.log | grep "something rare"

বীপ ফোঁড়া করে বেঁচে থাকার মতো পাইপ দেওয়ার মতো সহজ উপায় কি নেই? মত

tail -f development.log | grep "something rare" | beep

যদি তাই হয় তবে গ্রেপ আউটপুটটি এখনও প্রদর্শিত হবে?


ডিবিয়ান এবং ভেরিয়েন্টগুলির জন্য ডিফল্ট রেপোতে রয়েছে একটি বীপ প্রোগ্রাম রয়েছে কেবল ইনস্টল করা বিপ প্রস্তুত করুন তবে এটি
পাইপিংয়ের

উত্তর:


16

কেবল beepনিম্নলিখিত হিসাবে সংজ্ঞায়িত করুন :

beep() { read a || exit; printf "$a\007\n"; beep; }

তারপরে, আপনি আপনার আদেশটি ব্যবহার করতে পারেন:

tail -f development.log | grep "something rare" | beep

1
দুঃখিত তবে এটি কাজ করছে না, এটি কোনও কিছু বীপ বা মুদ্রণ করে না
জাকব কোসোরোবা

4
যদিও লেজ -f এর সরাসরি আউটপুট তাত্ক্ষণিক, এটি কোনও পাইপ দিয়ে যাওয়ার সাথে সাথে এটি বাফার হয়ে যায়। কিছু পর্যবেক্ষণ করার আগে আপনাকে পর্যাপ্ত "বিরল কিছু" জন্য অপেক্ষা করতে হবে।
mouviciel

আপনি আউটপুটটি পাস করতে পারতেন sedবা অনুরূপ (লেজ এবং গ্রেপের মধ্যে) something rareদিয়ে নিজেকে অনেকবার প্রতিস্থাপন করতে পারেন ge কতবার এটি করা দরকার তা নির্ভর করে পাইপটি কতটা বাফার করেছে on
ডেভিড স্পিললেট

6
@ ডেভিড - এটি হিট অ্যান্ড মিস মিস পদ্ধতির। : আপনি তথ্য একটি নল মাধ্যমে গৃহীত unbuffer করতে চান, পদ্ধতি এই উত্তরগুলোর বর্ণিত কোনো একটি ব্যবহার stackoverflow.com/questions/1000674/turn-off-buffering-in-pipe

2
@ নাগুলের পরামর্শটি সরিয়ে রেখে আমার কাছে এই tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
অনুরোধটি

10

প্রদত্ত উইন্ডো পরিবর্তিত হলে জিএনইউ স্ক্রিনে বীপের জন্য অন্তর্নির্মিত বৈশিষ্ট্য রয়েছে: ম্যান পৃষ্ঠার প্রাসঙ্গিক বিভাগটি দেখুন ।

শিরোনামের সংক্ষিপ্তসার:

$ screen
$ tail -f yourfile.log    # inside the screen session
<C-a> M    # "Window 0 (bash) is now being monitored for all activity."

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

আপনি দুটি screenউইন্ডো খোলার মাধ্যমে দুটি উইন্ডোতে সেরা পেতে পারেন ( <C-a> cএকটি উইন্ডো খুলতে, <C-a> <C-a>দুটি উইন্ডোর মধ্যে টগল করতে):

  1. সঙ্গে পর্যবেক্ষণ করা tail -f yourfile.log | grep 'something rare'
  2. সমাহারহীন, একটি সমতল সঙ্গে tail -f yourfile.log

তারপরে আপনি উইন্ডো 2 এ লগ স্ক্রোলের অতীতটি দেখে বসে থাকতে পারেন এবং "বিরল কিছু" দেখা দিলে আপনি উইন্ডো 1 থেকে বীপ পাবেন।

screen দুর্দান্তভাবে বহুমুখী - আমি এটি পড়ার জন্য সুপারিশ করি।


1
এটি কেবল "বিরল কিছু" তে বীপ দেয় না, তাই না?

1
এটি যদি সেই নির্দিষ্ট উইন্ডোতে যা ঘটেছিল তা কেবলমাত্র tail -f yourfile.log | grep something\ rareতার চেয়ে বেশি হয়tail -f logfile
ডেভিড স্পিলিট

ওফ, আমি খেয়াল করিনি যে তিনি কেবল বীপ চালিয়েছিলেন something rare। এটি প্রতিফলিত করার জন্য সম্পাদিত। গ্রেপ কাজ করবে, তবে তারপরে সে বাকী লগটি দেখতে পাবে না, কেবল বিরল রেখা - যেমনটি আমি বুঝতে পেরেছি তিনি পুরো লগটি স্ক্রোলিং অতীতটি দেখতে সক্ষম হতে চান, তবে নির্দিষ্ট ইভেন্টগুলিতে সতর্ক হন।
স্যাম স্টোকস

1

আপনি গ্রেপ কমান্ডে বাফার হওয়া থেকে আউটপুটটি থামাতে পারেন। বিশদটির জন্য ম্যান গ্রেপ দেখুন।

আপনি গ্রেপের আউটপুটটিকে বীপের মধ্যে পাইপ করতে পারেন।

ম্যান বিপ থেকে নিম্নলিখিত উদাহরণটি হ'ল ...

   As part of a log-watching pipeline

          tail -f /var/log/xferlog | grep --line-buffered passwd | \
          beep -f 1000 -r 5 -s

এই ম্যানুয়ালগুলিতে অনেক ভাল জিনিস রয়েছে। যদি কেবল এটি সন্ধানের জন্য আমাদের পড়তে হত না। ;-)


1

ওয়াচ কমান্ডটিতে একটি - বিপ বিকল্প রয়েছে এবং আপনি ভোটদানের ব্যবধানও সেট করতে পারেন তবে ২ সেকেন্ডের মানটি ঠিক হওয়া উচিত

watch --beep 'tail development.log | grep "something rare"'

1
দ্রষ্টব্য, watchপ্রতিটি (অন্তর) বিভাগে আপনার পরামিতি / কমান্ড চালিয়ে কাজ করে এরপরে ফলাফলটি পূর্ববর্তী রানের দিকে আসে। সুতরাং আপনি ব্যবহার না করে লেজ কমান্ডের সাধারণ সংস্করণটি ব্যবহার করতে চানtail -f
RyanWilcox

এটি আমার পক্ষে কার্যকর হয়নি ( watch --beepআমার লেজ / গ্রেপ যোগ করে এবং মোড়ানো সত্ত্বেও , আমি এখনও একটি বীপ পাইনি)।
মেশিনগোস্ট

1

আপনি নিম্নরূপে কন্ট্রোল-জি যুক্ত করতে সেড ব্যবহার করতে পারেন:

tail -f myFile | sed "s/.*/&\x07/"

বা কেবল বিরল লাইনে, গ্রেপ ব্যবহার না করে, নিম্নরূপ:

tail -f myFile | sed -n "/something rare/s/.*/&\x07/p"

যেখানে বলা আছে: লাইন যেখানে কিছু বিরল ঘটে উপর, গুলি কন্ট্রোল- জি সঙ্গে একই উপাদানের জন্য ubstitute সবকিছু প্রান্তে tacked, এবং মুদ্রণ (কিন্তু অ-মিল লাইন প্রিন্ট করবেন না)। দুর্দান্ত কাজ!


0

এইচ এম, ছদ্মবেশী। আমরা সম্ভবত এরকম কিছু করতে পারি?

for i in `find | grep 7171`; do beep; echo $i; done

বা আপনার ক্ষেত্রে

for i in `tail -f development.log | grep "something rare"`; do beep; echo $i; done

মনে হচ্ছে এটি কিছু বাফার করছে। forলুপের মাধ্যমে এই বাফারিং বন্ধ করার কোনও উপায় আছে কিনা তা আমি দেখতে পাব ।

স্পষ্টতই, আপনি ব্যবহার করে পাইপের বাফারিং সামঞ্জস্য করতে সক্ষম হওয়া উচিত ulimit -pতবে এটি আমার কাছে অবৈধ যুক্তি সম্পর্কে অভিযোগ রাখে। আমি এমন একটি পোস্টও পেয়েছি যা দাবি করে যে এই সীমাটি পরিবর্তন করতে আপনার কার্নেলটি পুনরায় সংকলন করতে হবে।


0

আগের চাকরিতে, আমি কেবল কমান্ড-ফু দিয়ে একটি নির্ভরযোগ্য প্রহরী পেতে পারি নি, সুতরাং আমার নীচের মতো একটি মোড়ক স্ক্রিপ্ট ছিল, যা প্রতি পল_ডুগ্রেশন সেকেন্ডে ফাইলটি পরীক্ষা করে এবং আগ্রহী বাক্যাংশের জন্য নতুন লাইনগুলি গ্রিপ করে।

#!/bin/bash

file=$1
phrase=$2
poll_duration=$3

typeset -i checked_linecount
typeset -i new_linecount
typeset -i new_lines
let checked_linecount=new_linecount=new_lines=0
echo "Watching file $file for phrase \"$phrase\" every $poll_duration seconds"

while [ 1 ]
do
        let new_linecount=`wc -l $file| awk '{print $1}'`
        if [[ $new_linecount > $checked_linecount ]]; then
                let "new_lines = $new_linecount-$checked_linecount"
                head --lines=$new_linecount "$file" | tail --lines=$new_lines | grep "$phrase" && beep
                let checked_linecount=$new_linecount
        fi
        sleep $poll_duration
done

এটি একটি ইউনিক্স মেশিনে ছিল। লিনাক্সে, আপনি এর ইনোটিফাই ফাইলওয়্যাচার ইন্টারফেসটি ব্যবহার করে আরও ভালভাবে যেতে পারেন । যদি এই প্যাকেজটি ( উবুন্টুতে ইনোটাইফাই-সরঞ্জামগুলি ) উপস্থিত থাকে তবে প্রতিস্থাপন করুন

sleep $poll_duration 

সঙ্গে

inotifywait -e modify "$file"  1>/dev/null 2>&1

ফাইলটি সংশোধন না করা অবধি এই কলগুলি অবরুদ্ধ। ব্লকিং সংস্করণটি প্রায় তত দক্ষ হিসাবে আপনি যে tail -fসংস্করণটি পাবেন তা যদি পাইফ বাফারিং ছাড়াই কাজ করার জন্য কনফিগার করা যায়।

দ্রষ্টব্য: স্ক্রিপ্টটি প্রথমে head --lines=$new_linecountনিশ্চিত করে তোলে যে ফাইলগুলি লাইন যুক্ত করা হয়েছে এটি পরীক্ষা করার পরে আমরা এটি পরীক্ষা করি না যে এই লুপটিতে ফাইলটির চেক হয়ে যায়।

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