চলমান প্রক্রিয়া শেষ হওয়ার পরে সতর্কতা


21

প্রক্রিয়াটি সম্পূর্ণ / প্রস্থান ( 1 , 2 ) শেষ হওয়ার সাথে সাথে এখানে সতর্কতা সম্পর্কিত কয়েকটি প্রশ্ন ও উত্তর রয়েছে - তবে এগুলি ধরেই নেওয়া হয় যে ব্যবহারকারী নিজেরাই প্রক্রিয়াটি জারি করেছেন এবং তাই এটির মধ্যে একটি সতর্কতা দিয়ে স্ক্রিপ্ট তৈরি করতে পারে পরিচালনা স্ক্রিপ্ট, বা একধরণের সতর্কতা প্রক্রিয়া পাইপ।

আমার পরিস্থিতিটি হ'ল যেটি আমার ব্যবহারকারী আরম্ভ করছেন না এমন প্রক্রিয়াটির সমাপ্তি / প্রস্থান সম্পর্কে আমি সতর্ক হতে চাই। যথা, আমি একটি উবুন্টু 12.04 এলটিএস সার্ভারে প্রচুর ভিডিও ফাইলগুলি প্রসেস করছি। এই ফাইলগুলিতে কিছু নির্দিষ্ট ক্রিয়াকলাপ খুব দীর্ঘ সময় নেয়, সুতরাং নির্দিষ্ট কোনও কাজ শেষ হলে আমি এক ধরণের সতর্কতা চাই (ইমেল দুর্দান্ত হবে)। তারা এতক্ষণ সময় নেয় যে পিআইটির উপর ভিত্তি করে ম্যানুয়ালি এক-অফের ভিত্তিতে এটি করা পুরোপুরি ঠিক আছে fine

আরও তথ্য সরবরাহ করার জন্য - আসুন আমি বলি যে আমি একটি বিশেষত বড় ফাইলটি প্রক্রিয়া করছি, এবং আমি দেখতে পাচ্ছি যে এটি একটি এফএফএমপিইজি স্ক্রিপ্টে অগ্রসর হয়েছে, প্রক্রিয়াটি নিজেই একটি পাইথন স্ক্রিপ্ট (এটি বেশ জটিল, এবং নিজেই লিখে নেই, এবং কিছু) আমি সংশোধন করতে চাই না - যদিও এটিই হবে প্রথম যৌক্তিক পদ্ধতির)। আমি পিআইডি দিয়ে একটি কমান্ড বা স্ক্রিপ্ট জারির কল্পনা করেছিলাম অজগর স্ক্রিপ্টটিকে আর্গুমেন্ট হিসাবে চালাচ্ছি এবং যখন সেই পিআইডি সহ প্রক্রিয়াটি আর চলবে না, সতর্কতা স্ক্রিপ্টটি এটি করে does

কোন ধারনা?


মনিট ( mmonit.com/monit/docamentation ) একটি সম্ভাব্য বিকল্প হিসাবে মনে হয়, তবে আমার যা প্রয়োজন তার চেয়ে অনেক জটিল - আশা করছি যে আমি যা বলছি তা করার একটি সহজ, আরও প্রত্যক্ষ এবং কম ফোলা উপায় থাকতে পারে এবং আরও কিছু হতে পারে না ।
dongle

উত্তর:


9

আমি প্রসেস_ওয়্যাচার.পি লিখেছি

process_watcher --pid 1234 --to me@gmail.com

বর্তমানে, ইমেল বডিটি দেখে মনে হচ্ছে:

পিআইডি 18851: / সপ্তাহ / লিবি / লিবিরেফাইস / প্রোগ্রামগ্রাম / এসফিস.বিিন - লেখক - স্প্ল্যাশ-পাইপ = 5
শুরু হয়েছে: থু, 10 মার্চ 18:33:37 সমাপ্ত: থু, মার্চ 10 18:34:26 (সময়কাল 0 : 00: 49)
স্মৃতি (বর্তমান / শীর্ষ) - আবাসিক: 155,280 / 155,304 কেবি ভার্চুয়াল: 1,166,968 / 1,188,216 কেবি

[+] indicates the argument may be specified multiple times, for example:
 process-watcher -p 1234 -p 4258 -c myapp -c "exec\d+" --to person1@domain.com --to person2@someplace.com

optional arguments:
  -h, --help            show this help message and exit
  -p PID, --pid PID     process ID(s) to watch [+]
  -c COMMAND_PATTERN, --command COMMAND_PATTERN
                        watch all processes matching the command name. (RegEx pattern) [+]
  -w, --watch-new       watch for new processes that match --command. (run forever)
  --to EMAIL_ADDRESS    email address to send to [+]
  -n, --notify          send DBUS Desktop notification
  -i SECONDS, --interval SECONDS
                        how often to check on processes. (default: 15.0 seconds)
  -q, --quiet           don't print anything to stdout

আপনার যদি কোনও উন্নতির প্রয়োজন হয় তবে একটি গিটহাব ইস্যু সিটি করুন।


23

এটার মতো কিছু?

(while kill -0 $pid; do sleep 1; done) && echo "finished"

$pidপ্রক্রিয়া আইডির echo "finished"সাথে এবং প্রক্রিয়াটি প্রস্থান হওয়ার পরে যা কিছু করতে চান তা প্রতিস্থাপন করুন ।

উদাহরণ স্বরূপ:

(while kill -0 $pid; do sleep 1; done) && mail ...

বিষ্ময়কর! একটি যাদুমন্ত্র মত কাজ করে.
dongle

1
অপ্রাপ্তবয়স্ক (এবং সম্ভবত সুস্পষ্ট) নোট - যখন বলা হয় যে প্রক্রিয়াটি ব্যবহারকারীর মালিকানাধীন নয়, অবশ্যই হত্যার ঘটনাটি sudo করতে হবে।
dongle

1
@dongle, আমার RHEL বাক্সে অন্তত kill -0রিপোর্ট No such processঅবর্তমান pids এবং Operation not permittedএকজন আলাদা ব্যবহারকারীতে মালিকানাধীন pids তাই সম্ভবত ত্রুটি বার্তা ব্যাখ্যা প্রয়োজনীয়তার নিবারণ করা উচিতsudo
Iruvar

1
আপনি যদি প্রতিধ্বনিত হন তবে আপনি সর্বদা এটি করতে পারেন echo -en "\007 \007 \007"যা একটি টার্মিনাল 'বেল' জারি করবে। এটি কোনও প্রকৃত শ্রাব্য শব্দের অনুবাদ করে কিনা তা আপনার টার্মিনাল এবং হার্ডওয়্যারের উপর নির্ভর করে (তবে সাধারণত হয়)।
মর্গন

5

&&প্রথম সাফল্যের সাথে শেষ হয়ে গেলে আমি দ্বিতীয় কমান্ড কার্যকর করতে ব্যবহার করি । এখানে কয়েকটি উদাহরণ:

  1. একটি বড় ফোল্ডার এবং বিপ মুছুন:

    rm -rv ~/tmp && beep
  2. একটি কার্নেল সংকলন করুন এবং একটি ইমেল প্রেরণ করুন:

    make && mail -s "Compilation is done" user@yourmaildomain.com

এটি কি আপনার সমস্যা সমাধানের ভাল উপায়? অন্য ক্ষেত্রে, আপনি ||ব্যর্থতার ক্ষেত্রে একটি এবং একটি তৃতীয় কমান্ড যুক্ত করতে পারেন ।

এছাড়াও, একটি শেল স্ক্রিপ্ট আপনার কমান্ডের প্রস্থান স্থিতি ( $?) পেতে পারে if/elseএবং আপনি যা খুশি তা করতে পারেন এবং লুপগুলি সহ ।


ধন্যবাদ উইলিয়ান, তবে আমি যেমন বলেছি, আমার ব্যবহারের ক্ষেত্রে বিশেষ চ্যালেঞ্জটি হ'ল এটি যে কোনও আদেশ আমি জারি করছি তা নয়, বরং এটি একটি চলমান প্রক্রিয়া। সুতরাং && কোনও বিকল্প নয়। যাই হোক ধন্যবাদ.
dongle

4

আপনার যদি পিড না থাকে তবে ffmpeg এর সমস্ত দৃষ্টান্ত শেষ না হওয়া পর্যন্ত এটি চলবে:

(while pidof ffmpeg | grep -q "[0-9]?"; do sleep 1; done) && echo "finished"

0

আপনি যদি কোনও পোলিং বিকল্প বা কোনও বাহ্যিক স্ক্রিপ্ট ব্যবহার করতে না চান এবং আপনি ইতিমধ্যে দীর্ঘ-চলমান প্রক্রিয়া শুরু করেছেন, আপনি এটি CTRL + Z দিয়ে সাসপেন্ড করতে পারেন (SIGTSTP সিগন্যাল প্রেরণ করে) এবং তারপরে এটি আবার চালু করতে পারেন fg(এতে প্রক্রিয়া প্রবর্তন প্রক্রিয়াতে যান) অগ্রভাগ)।

উদাহরণ স্বরূপ:

my_command  # long running command
# press CTRL+Z to pause
fg ; notify-send 'finished'

ব্যতীত ... "আমার অবস্থা হ'ল আমি যে প্রক্রিয়াটি ব্যবহারকারীর দ্বারা আরম্ভ করা হচ্ছে না তার প্রক্রিয়াটি সমাপ্ত / প্রস্থান সম্পর্কে সতর্ক হতে চাই" "
জেফ শ্যাচলার

-1

আমি একটি অ্যাপ্লিকেশন তৈরি করেছি যা কোনও প্রক্রিয়া শেষ হয়ে গেলে আপনার অ্যান্ড্রয়েড ফোনে একটি বিজ্ঞপ্তি প্রেরণ করবে যাতে আপনার কম্পিউটারে টিচার হওয়ার দরকার নেই।

ইনস্টল করুন, তারপরে ;notifier.shআপনার কমান্ডের শেষে যুক্ত করুন ।

উদাহরণস্বরূপ, যদি আপনার আদেশটি ছিল make install, আপনি আপনার আদেশটি তৈরি করবেন:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier


“… তবে এই সমস্তই ধরে নেয় যে ব্যবহারকারী জারি করেছেন বলেছিলেন তারা নিজেই প্রক্রিয়া করে, এবং এভাবে এটি পরিচালনা সংক্রান্ত স্ক্রিপ্টে তৈরি একটি সতর্কতার সাথে স্ক্রিপ্ট করতে পারে, বা প্রক্রিয়াটিকে এক ধরণের সতর্কতার সাথে পাইপ করতে পারে। / আমার পরিস্থিতি হ'ল আমি যে প্রক্রিয়াটি ব্যবহারকারীর দ্বারা আরম্ভ করা হচ্ছে না তার প্রক্রিয়াটি সমাপ্ত / প্রস্থান সম্পর্কে সতর্ক হতে চাই
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.