আমি কীভাবে পটভূমির কাজ হিসাবে `watch` চালাতে পারি?


19

আমি যখন চালাচ্ছি:

watch 'cmd >> output.txt' &

কাজটি সিস্টেমের দ্বারা স্থগিত হয়ে যায়:

3569 স্টপড (টিটি আউটপুট)

এখানে কি কাজ আছে?

উত্তর:


26

এর উদ্দেশ্য watchহ'ল একটি কমান্ডের পূর্ণ-স্ক্রিনের ফলাফল প্রদর্শন করা এবং ধারাবাহিকভাবে আপডেট করা; যদি আপনি আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করে থাকেন এবং এটি ব্যাকগ্রাউন্ড করে থাকেন তবে প্রথমদিকে ঘড়িটি ব্যবহার করার কোনও কারণ নেই।

আপনি যদি watchকিছুক্ষণ বিলম্বের সাথে বার বার একটি কমান্ড চালাতে চান ( ডিফল্টরূপে দুই সেকেন্ড অপেক্ষা করেন), আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

while true; do
    cmd >> output.txt
    sleep 2
done

যদিও কোনও অ-অবরুদ্ধ ফ্যাশনে এটি করার কোনও উপায় আছে? উদাহরণস্বরূপ, যদি আমি এটি এবং অন্যান্য কমান্ডগুলি একটি একক ব্যাশ স্ক্রিপ্টে রাখতে চাই এবং এটি কি পরে এই কোডটি চালিয়ে যেতে থাকে (এখনও পটভূমিতে এটি করার সময়)?
অস্টিন

14

এখানে একটি উপায়:

watch -n 1 'date' &>/dev/null &

যেহেতু আপনি প্রক্রিয়াটির ব্যাকগ্রাউন্ড করেছেন তাই আমরা ধরে নিতে পারি যে আপনার টার্মিনাল ডিসপ্লে দরকার নেই এবং আপনি কোনও ফাইলে পুনর্নির্দেশ করছেন। যদি আপনি এটি করেন তবে আপনি watchইস্যু ছাড়াই পটভূমিতে সক্ষম হবেন ।

sleepমাইকেল মরোজেকের পরামর্শ অনুসারে, ধীরে ধীরে পিছিয়ে পড়বে যা অনাকাঙ্ক্ষিত হতে পারে। এক বিভ্রান্ত শেল স্ক্রিপ্ট ছাড়াও যা সিস্টেম সময় পর্যবেক্ষণ করে এবং অতিবাহিত সময়ের উপর ভিত্তি করে একটি কমান্ড কার্যকর করে, watch -pসঠিক সময়ের জন্য উপযুক্ত বিকল্প হতে পারে।

সঠিক সময়ের জন্য:

watch -n 1 -p 'date' &>/dev/null &

দুঃখিত, এটি কিভাবে কাজ করে? কেন কেবল &দু'বার ব্যবহার করা সম্ভব ?
ফিল্ড 294

man bashপ্রথমটি কীভাবে &কাজ করে তা দেখতে পাইপলাইন বিভাগটি পড়ুন । ;)
মিয়েরইন

11

আমি আপনার অনুপ্রেরণাগুলি সম্পর্কে নিশ্চিত নই, তবে সম্ভবত এটি যথেষ্ট হবে?

while true; do sleep 2; cmd >>output.txt; done &

অন্যথায়, দয়া করে আপনার কেন প্রয়োজন তা ব্যাখ্যা করুন watch


2

teeতোমার বন্ধু. উদাহরণস্বরূপ, আপনি কীভাবে বর্তমান ডিরেক্টরিতে ফাইলগুলির সংখ্যা প্রদর্শন করতে পারেন এবং এটি গণনাতে সংযুক্ত করুন t txt প্রতি 2 সেকেন্ডে:

watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'

2

আপনার অনুপ্রেরণার উপর নির্ভর করে:

  • আপনি নিয়মিত কিছু চালাতে চান। তারপরে আপনি সরাসরি ক্রোন ব্যবহার করতে পারেন। (যদি 1 মিনিটের সময় গ্রানুলারিটি আপনার উদ্দেশ্যে যথেষ্ট হয়)।

    • দ্রষ্টব্য: যদি বিরতি খুব সংক্ষিপ্ত হয় বা ডিভাইসটি খুব সীমাবদ্ধ থাকে এবং যদি আপনি ক্রন্ড থেকে কম বার্তা লগ করতে সিসলগকে কনফিগার না করেন তবে এটি আপনার সিসলগটি খুব দ্রুত পূরণ করবে।
  • আপনি বারবার কিছু চালাতে চান:

    while sleep 2 ; do
      cmd
    done >& log.txt

    (উদাহরণস্বরূপ, আপনি এটি ক্রোনটাব থেকে চালাতে পারেন, যদিও স্ক্রিপ্ট ব্যবহারের পক্ষে উচ্চ প্রস্তাব দেওয়া হয়)।

  • আপনি পর্যায়ক্রমে একটি কমান্ড চালাতে চান এবং এটির শেষ নির্বাহের আউটপুটটিতে অ্যাক্সেস থাকতে পারে।

    • আপনি একটি ramfs এ আউটপুট লিখতে পারেন (আগে স্ক্রিপ্টটি সংশোধন করে):

      while sleep 2 ; do
        cmd >& last_execution.log
      done 

      বা আরও ভাল:

      while sleep 2 ; do
        cmd >& last_execution.log.tmp 
        mv last_execution.log.tmp last_execution.log ## atomically
      done 
    • আপনি একত্রিত করতে পারেন screenএবং watch, যাতে আপনি সর্বদা সর্বশেষতম স্থিতি পরীক্ষা করতে পারেন, যতক্ষণ না এটি কোনও স্ক্রিনফুলের সাথে ফিট থাকে:

      screen watch -n 3660 ./make-backup.sh

1

আপনি স্ক্রিন কমান্ড ব্যবহার করতে পারেন।

http://www.cyberciti.biz/tips/linux-screen-command-howto.html


স্ক্রিনের সাহায্যে আপনি একটি ব্যাকগ্রাউন্ড টার্মিনাল সেশন তৈরি করতে পারেন, এটি বন্ধ করতে এবং আপনার যখন প্রয়োজন হবে তখন খুলতে পারেন।
রবার্তো

0

যদি আপনার অবশ্যই ব্যবহার করা হয় watch- কেবল মাইক ড্যাঞ্জেলো এবং l0b0 এর উত্তরগুলি একত্র করুন

watch -n 1 'cmd | tee -a output.txt' &>/dev/null &

যেমন

watch -n 1 'date | tee -a output.txt' &>/dev/null &

তারপরে কয়েক সেকেন্ড যেতে দেখুন

tail -f output.txt

0

ওয়াচটি স্ক্রিনে আউটপুট করার জন্য ডিজাইন করা হয়েছে, তবে এটির আউটপুট পুনঃনির্দেশিত করা যেতে পারে (স্টাডআউট এবং স্ট্ডার উভয়) তারপরে এটি পটভূমিতে চলবে।

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