এমন কোনও প্রোগ্রাম আছে যা কোনও প্রক্রিয়া শেষ হয়ে গেলে আমাকে একটি বিজ্ঞপ্তি ইমেল প্রেরণ করতে পারে?


46

আমি একজন গণ্য বিজ্ঞানী এবং লিনাক্সে আমি অনেক দীর্ঘ গণনা চালাই। বিশেষত, আমি GROMACS প্যাকেজ ব্যবহার করে মলিকুলার ডায়নামিক্স (এমডি) সিমুলেশনগুলি চালনা করি এই অনুকরণগুলি কয়েক বা সপ্তাহ সময় নিতে পারে, চলমান (উদাহরণস্বরূপ) 8 থেকে 24 কোর। আমার কাছে একটি ক্লাস্টারের বেশ কয়েকটি নোডে অ্যাক্সেস রয়েছে, যার অর্থ যে কোনও নির্দিষ্ট সময়ে আমি প্রায় 4 বা 5 টি কাজ চালাচ্ছি (প্রতিটি আলাদা নোডে এবং প্রতিটি 8-24 কোরে)।

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

লিনাক্স প্রক্রিয়া শেষ হওয়ার পরে আমি কী কোনও ইমেল পেতে পারি? এমন কোনও লিনাক্স প্রোগ্রাম থাকতে পারে যা এটি করে? আমি কখন টার্মিনাল দিয়ে লগ ইন করব এবং পরবর্তী সিমুলেশন প্রস্তুত করব তা আমি জানতে পারি।

আমি উবুন্টু লিনাক্স ব্যবহার করছি। আপনার সময় জন্য ধন্যবাদ।


3
এটি একটি সাধারণ প্রশ্নের জন্য একটি বরং দীর্ঘ এবং অপ্রাসঙ্গিক বর্ণনা যা ইতিমধ্যে শিরোনামে আবৃত ছিল। আপনি কি সর্বদা এটি করেন?
একিউম্যানাস

5
@ এ বি বি বিজ্ঞানী হিসাবে আমি সেখানে "দীর্ঘ এবং অপ্রাসঙ্গিক" বর্ণনায় দরকারী তথ্য বলে বিবেচনা করি। উদাহরণস্বরূপ, আমরা জানি যে ম্যানুয়াল টার্মিনাল কাজ করা প্রয়োজন এবং তাই প্রশ্ন জিজ্ঞাসার কারণ রয়েছে। এছাড়াও ওপি কী করছে সে সম্পর্কে আমরা কিছু ধারণা পেয়েছি আমরা সম্পূর্ণ অন্ধকারে ভাবছি না এবং তাই অতিরিক্ত তথ্য সরবরাহ করতে সক্ষম হতে পারি যা প্রশ্নে অনুরোধ করা হয়নি তবে এটি ব্যবহার বা আগ্রহের হতে পারে।
ব্যবহারকারী 3728501

উত্তর:


30

ডেমনটিতে জমা দেওয়া চাকরিগুলি atস্টার্ডার এবং স্টাডআউট থেকে আপনার কোনও আউটপুট প্রেরণে প্রেরণ করবে। কাজের কোনও আউটপুট না থাকলেও মেল প্রেরণের জন্য এটিও কনফিগার করা যেতে পারে। এটি একটি কন্ট্রোলিং টার্মিনাল ছাড়া চালানোর সুবিধাও রয়েছে, সুতরাং আপনার টার্মিনালটি বন্ধ করে দেওয়া কাজের উপর কী প্রভাব ফেলবে সে সম্পর্কে আপনাকে চিন্তা করার দরকার নেই।

উদাহরণ:

echo "/opt/product/bin/job.sh data123"|at -m NOW

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

atব্যাচ মোড রয়েছে যেখানে আপনি যখন সিস্টেম ব্যস্ত না থাকেন তখন চলতে কাজ সারি করতে পারেন। যখন একাধিক ব্যবহারকারী সংস্থানগুলির জন্য প্রতিযোগিতা করছেন এটি খুব ভাল কুইং সিস্টেম নয়, তবে আপনি যদি এটির সাথে কাজ চালাতে চান তবে:

echo "/opt/product/bin/job.sh dataA"|batch
echo "/opt/product/bin/job.sh dataB"|batch
echo "/opt/product/bin/job.sh dataC"|batch

ডিফল্টরূপে চাকরিগুলি প্রারম্ভিক হবে না যতক্ষণ না সিস্টেমের লোড 1.5 এর কম হয় তবে এই লোড ফিগারটি সামঞ্জস্য করা যায় (এবং 24 টি কোর দিয়ে আমি বলতে চাই যে আপনার উচিত)। তারা সমান্তরালভাবে চালাতে পারে যদি তারা লোড সীমা (1.5। ডিফল্ট) আবার লোডাভগকে না ফেলা করে, বা তারা স্বতন্ত্রভাবে লোডাভগকে 1.5 এর চেয়ে বেশি চাপ দেয় তবে তারা সিরিয়ালে চালিত হবে।

আপনি এর সাথে কাজের সারিটি দেখতে atqএবং এর সাথে কাজ মুছতে পারেনatrm

উত্তর নির্ভরতা:

  1. চলমান atdডেমন ( ps -ef|grep atd)
  2. তোমার কাজ জমা দিতে অনুমতি দেওয়া হয় atd(দ্বারা অস্বীকার করা /etc/at.deny/ /etc/at.allowকনফিগারেশন)
  3. কার্যকরী sendmailএমটিএ

বেশিরভাগ সিস্টেমে এই প্রয়োজনীয়তাগুলির সাথে কোনও সমস্যা নেই তবে এটি পরীক্ষা করা উপযুক্ত।


49

হ্যাঁ, আছে

command; echo "Process done" | mail -s "Process done" mail@domain.tld

যেখানে -এস "পাঠ্য" বিষয়, প্রতিধ্বনি আপনাকে মেল পাঠাতে কিছু টেক্সট দেয়।


4
mailকমান্ড স্থানীয় MTA এর প্রয়োজন নেই সঠিকভাবে কনফিগার করা আবশ্যক। এটি সহজ এবং সহজ সমাধান।
জর্ডানম

6
আপনি mailকমান্ডের আউটপুট প্রেরণ করতেও ব্যবহার করতে পারেন :{ command; echo Done; } | mail -s "subject" recipient@example.com
গ্লেন জ্যাকম্যান

4
@ অ্যান্ড্রু সচেতন হন যে এর জন্য টার্মিনাল / শেলটি চালানোর জন্য আপনি আসল কমান্ডটি চালিয়েছেন তা উন্মুক্ত থাকতে হবে। আপনি যদি এর মতো কিছু ব্যবহার করেন screenবা tmuxএটি শক্ত নাও হতে পারে তবে এটি কয়েকদিন / সপ্তাহ ধরে কোথাও কোনও টার্মিনাল খোলা থাকলে আরামদায়ক হতে পারে। কাজের ব্যবস্থাপনার সমাধানওat সেই সমস্যার যত্ন নেবে।
কালেব

@ কালেব ক্যান্ট আপনি &কমান্ডের শেষে একটি যুক্ত করে এটি পিছনের মাঠে চালানোর জন্য পেতে পারেন। sleep 30 && echo "Process done" | mail -s "Process done" mail@domain.tld &
থিও কাউজেলিস

@ নাহ আপনি পারবেন না। এমনকি পটভূমিতে প্রক্রিয়াটি এখনও আপনার শেলের একটি শিশু এবং যদি শেলটি মারা যায় তবে শিশু প্রক্রিয়াটি একটি কিল সংকেত গ্রহণ করবে। আপনি এগুলি লিঙ্কযুক্ত করতে ব্যবহার করতে পারেন nohup, তবে আপনি এটি শেল থেকে নিয়ন্ত্রণ চালিয়ে যাওয়ার ক্ষমতাও হারাবেন। এটি আংশিক যা tmuxজন্য হয়। এটি আপনার সক্রিয়ভাবে সংযুক্ত এবং দেখা টার্মিনাল সেশন থেকে চলমান প্রক্রিয়াগুলিকে ডিভোর্স করে যখন এখনও আপনাকে তাদের সাথে স্বাভাবিকভাবে ইন্টারঅ্যাক্ট করতে দেয়।
কালেব

7

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

#!/usr/bin/python

import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

অন্যান্য উত্তরের প্রস্তাবিত পাইপ অপারেটরের সাথে এটি ব্যবহার করুন।

এই সমস্যাটির জন্য আমি যে আরও দুর্দান্ত সমাধান পেয়েছি তা হ'ল পুশওভার ব্যবহার করা । পুশওভার - "পুশওভার আপনার অ্যান্ড্রয়েড এবং আইওএস ডিভাইসে রিয়েল-টাইম বিজ্ঞপ্তিগুলি প্রেরণ সহজ করে তোলে" " আমি একটি সাধারণ স্ক্রিপ্ট সেটআপ করি যা আমার বিল্ডগুলি সম্পন্ন হওয়ার পরে আমার ফোনে একটি বার্তা প্রেরণের জন্য সহজ এপিআই-কে হস্তান্তর করে।

curl -s \
  -F "token=APP_TOKEN" \
  -F "user=USER_KEY" \
  -F "message=The build is done." \
  https://api.pushover.net/1/messages.json

6

trapপ্রক্রিয়া থেকে প্রস্থান করার সময়, বা ইন্টারুপ্ট, হ্যাঙ্গআপ বা প্রক্রিয়া সমাপ্তির সময় আপনি মেল প্রেরণের জন্য কমান্ডও ব্যবহার করতে পারেন eএই কোডটি যা আপনাকে আপনার স্ক্রিপ্টের শীর্ষে রাখতে হবে।

    trap 'mail -s "Process done" mail@domain.tld' exit # It will mail on normal exit
    trap 'mail -s "Process interrupted" mail@domain.tld' INT HUP# it will mail on interrupt or hangup  of the process

অরুণ


5

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

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

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


2
আমার জন্য বিজয়ী কারণ ইতিমধ্যে চলমান প্রক্রিয়াটিতে পিআইডি দ্বারা সংযুক্ত করতে পারে।
জোসেফ_মরিস

1
@ জোসেফ_মরিস আমি এই স্ক্রিপ্টটিও পছন্দ করি - তবে সম্পূর্ণতার জন্য আপনি কমান্ড জারি করে সহজেই এই সহায়িকা ছাড়াই একটি চলমান (স্থগিত, সিটিআরএল-জেড মাধ্যমে) প্রক্রিয়াতে সংযুক্ত করতে পারেন fg ‹PID›; mail -s Completed to@example.com <<< 'Message here'
কনরাড রুডল্ফ

1

আমার একটি হোম-বর্ধিত স্ক্রিপ্ট রয়েছে যা আমার পক্ষে কাজ করে। ব্যবহার:

mail-after <your command>

এটি বিষয়টির অর্থবহ তথ্য এবং শরীরে প্রক্রিয়াটির আউটপুট সহ একটি ইমেল প্রেরণ করবে।

গিটহাব রেপোর মূল পৃষ্ঠায় ইনস্টলেশন সংক্রান্ত নির্দেশাবলী রয়েছে - বর্তমানে সমস্ত স্ক্রিপ্টগুলির জন্য একটি সিমিলিংক তৈরি করা হয়েছে ~/bin


1

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

# Check that "pgrep $PROGRAM" returns the rid PID.
PROGRAM=foo
RECIPIENTS=you@yours.com
echo Watching $PROGRAM; while pgrep $PROGRAM &>/dev/null ; do sleep 1; echo -ne "."; done ; echo "$PROGRAM process done" | /bin/mail -s "$PROGRAM process done" $RECIPIENTS;

আমি অনুরূপ কিছু ব্যবহার করেছি: যখন [[$ (pgrep myprog)]]; 60 ঘুমাও; সম্পন্ন; প্রতিধ্বনি "মাইপ্রোগটি সম্পন্ন হয়েছে" | মেল -s "প্রক্রিয়াটি সম্পন্ন" mail@example.com
মারার

0

যুগে যুগে, আমি এই উপনামটি তৈরি করেছি (সিএসএসে, আমি এখন এটি টিসিএসে ব্যবহার করি):

alias shunt "( \!* | Mail -s 'Output of: \!*' $user) >& /dev/null &"

এটি Mailআপনার সিস্টেমে ইনস্টল করা এবং কাজ করা প্রয়োজন , তবে আপনার কমান্ডটি কমান্ড লাইনের (ঠিক মতো এলিয়াস, টিল্ডের বিস্তৃতি ইত্যাদি) যেমন চলবে তেমন সুবিধা রয়েছে - আপনি যখন কোনও কাজ ব্যবহার করেন atবা cronএটি কোনও ডিফল্টর অধীনে চলে তখন আপনার স্ক্রিপ্ট ব্যর্থ হতে বা অস্বাভাবিক আউটপুট সরবরাহ করার জন্য পরিবেশটি যথেষ্ট আলাদা হতে পারে (আমাকে এটি cronবহুবার কামড়ে ধরেছে )

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