जब प्रक्रिया समाप्त हो जाती है तो अलर्ट करें


21

प्रक्रिया पूरी होने / बाहर निकलने ( 1 , 2 ) के बारे में सतर्क रहने के संबंध में कुछ सवाल और जवाब यहां दिए गए हैं - लेकिन ये सभी मानते हैं कि उपयोगकर्ता ने जारी की गई प्रक्रिया को स्वयं कहा है, और इस तरह इसे अलर्ट में बनाया गया है। शासी लिपि, या किसी प्रकार की चेतावनी के लिए प्रक्रिया को पाइप करती है।

मेरी स्थिति यह है कि मैं एक प्रक्रिया के पूरा होने / बाहर निकलने के बारे में सचेत रहना चाहूंगा जो मेरे उपयोगकर्ता द्वारा प्रारंभ नहीं की जा रही है। अर्थात्, मैं एक Ubuntu 12.04 LTS सर्वर पर बड़े पैमाने पर वीडियो फ़ाइलों को संसाधित कर रहा हूं। इन फ़ाइलों पर कुछ निश्चित ऑपरेशनों में बहुत लंबा समय लगता है, इसलिए मैं एक विशेष प्रकार का अलर्ट (ईमेल बहुत अच्छा) चाहूंगा जब कोई विशिष्ट खत्म हो जाएगा। वे इतना लंबा समय लेते हैं, कि एक बार के आधार पर, मैन्युअल रूप से, PIT पर आधारित यह पूरी तरह से ठीक होगा।

अधिक जानकारी प्रदान करने के लिए - मान लीजिए कि मैं एक विशेष रूप से बड़ी फ़ाइल को प्रोसेस कर रहा हूं, और मैं देखता हूं कि यह एक FFMPEG स्क्रिप्ट पर आगे बढ़ चुका है, यह प्रक्रिया खुद एक पायथन स्क्रिप्ट है (जो कि काफी जटिल है, और खुद से नहीं लिखी गई है, और कुछ मैं संशोधित नहीं करना चाहता - हालांकि यह पहला तार्किक दृष्टिकोण होगा)। मैं कल्पना करता हूं कि एक तर्क के रूप में पायथन स्क्रिप्ट चलाने वाली पीआईडी ​​के साथ एक कमांड या स्क्रिप्ट जारी की जाए, और जब उस पीआईडी ​​के साथ प्रक्रिया अब नहीं चल रही है, तो अलर्ट स्क्रिप्ट अपनी बात करती है।

कोई विचार?


monit ( mmonit.com/monit/documentation ) एक संभावित विकल्प की तरह लगता है, लेकिन जितना मुझे चाहिए उससे कहीं अधिक जटिल है - उम्मीद करना एक सरल, अधिक प्रत्यक्ष, और कम फूला हुआ तरीका है जो मैं कर रहा हूं, केवल वही कर रहा हूं और इससे अधिक नहीं। ।
डोंगल

जवाबों:


9

मैंने process_watcher.py लिखा

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

वर्तमान में, ईमेल निकाय इस तरह दिखता है:

PID 18851: /usr/lib/libreoffice/program/soffice.bin --writer --splash- पाइप = 5
शुरू: थू, 10 मार्च 18:33:37 समाप्त: थू, 10 मार्च 18:34:26 (अवधि 0) : 00: 49)
मेमोरी (वर्तमान / शिखर) - निवासी: 155,280 / 155,304 kB वर्चुअल: 1,166,968 / 1,188,216 kB

[+] 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

यदि आपको इसमें किसी सुधार की आवश्यकता है, तो एक GitHub मुद्दे को Ceate करें।


23

कुछ इस तरह?

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

$pidप्रक्रिया आईडी के साथ बदलें और echo "finished"जब भी प्रक्रिया समाप्त हो जाए तो आप जो भी करना चाहते हैं।

उदाहरण के लिए:

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

अभूतपूर्व! एक जादू की तरह काम करता है।
डोंगल

1
माइनर (और स्पष्ट रूप से स्पष्ट) नोट - जब कहा जाता है कि प्रक्रिया उपयोगकर्ता के स्वामित्व में नहीं है, तो उसे मारना चाहिए।
डोंगल

1
@ मैंडेल, कम से कम मेरे आरएचईएल बॉक्स पर, गैर-मौजूद pids के लिए kill -0रिपोर्ट No such processकरता है और 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और लूप के साथ आप जो चाहें कर सकते हैं।


धन्यवाद विलियन, लेकिन जैसा कि मैंने कहा, मेरे उपयोग-मामले में विशेष चुनौती यह है कि यह एक आदेश नहीं है जिसे मैं जारी कर रहा हूं, लेकिन पहले से ही चल रही प्रक्रिया। इस प्रकार && एक विकल्प नहीं है। फिर भी धन्यवाद।
डोंगल

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


"... लेकिन ये सभी मानते हैं कि उपयोगकर्ता ने जारी की गई प्रक्रिया को स्वयं जारी किया है, और इस प्रकार इसे एक चेतावनी के साथ नियंत्रित कर सकता है, जो शासी स्क्रिप्ट में निर्मित है, या प्रक्रिया को किसी प्रकार के अलर्ट पर पाइप कर सकता है। / मेरी स्थिति यह है कि मैं एक ऐसी प्रक्रिया को पूरा करने / बाहर निकलने के बारे में सचेत रहना चाहूँगा जो मेरे उपयोगकर्ता द्वारा प्रारंभ नहीं की जा रही है। ''
जी-मैन कहते हैं 'मोनिका'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.