プロセスが完了したら通知メールを送信できるプログラムはありますか?

プロセスが完了したら通知メールを送信できるプログラムはありますか?

私はコンピュータサイエンティストで、Linuxで長い計算をたくさん実行しています。具体的には、次のコマンドを使用して分子動力学(MD)シミュレーションを実行します。GROMACSパッケージ。 これらのシミュレーションには数日または数週間かかり、たとえば8〜24のコアで実行されます。クラスタ内の複数のノードにアクセスできます。つまり、いつでも約4〜5個のジョブを実行します(各ジョブは異なるノードで、各ジョブは8〜24個のコアで)。

問題は、シミュレーションにかかる時間が可変であることです。私はすべてのノードが年中無休でシミュレーションを実行するのが好きですが、新しいシミュレーションを開始するには端末を使用してログインし、いくつかの手動操作を実行する必要があります。ところで、シミュレーション時間がどれくらい残ったのかを常に忘れてしまうので、常に確認を続けています。

Linuxプロセスが完了したら電子メールを受信する方法はありますか?これを行うことができるLinuxプログラムはありますか?これにより、いつ端末を使用してログインし、次のシミュレーションを準備する必要があるかを確認できます。

私はUbuntu Linuxを使用しています。時間をいただきありがとうございます。

答え1

はい

command; echo "Process done" | mail -s "Process done" [email protected]

-s "text"が件名の場合、echoはメールに送信するテキストを提供します。

答え2

デーモンに送信されたジョブは、at完了時にstderrとstdoutのすべての出力を送信します。ジョブに出力がない場合でも、電子メールを送信するように設定できます。また、端末を制御しなくても実行できるという利点があり、業務に影響を及ぼす可能性のある端末を閉じることを心配する必要はありません。

例:

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/config によって拒否されずにジョブを送信できます。/etc/at.deny/etc/at.allow
  3. 機能性sendmailMTA

ほとんどのシステムはこれらの要件を満たしていますが、確認する価値があります。

答え3

電子メールを送信するには、Pythonスクリプトを設定することをお勧めします。使用しているサービスに関係なく、正しいメールサーバーを作成して構成するのは簡単です。それらは次のとおりです。

#!/usr/bin/python

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"

他の答えで提案されたパイプ演算子でこれを使用してください。

この問題について私が見つけたもう一つの良い解決策は、以下を使用することです。押し下げる。 Pushover - 「Pushoverを使用すると、AndroidおよびiOSデバイスにリアルタイムの通知を簡単に送信できます。」ビルドが完了したら、単純なAPIを利用して携帯電話にメッセージを送信する簡単なスクリプトを設定しました。

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

答え4

私は書いたprocess_watcher.py

process_watcher --pid 1234 --to [email protected]

現在のメール本文は次のとおりです。

PID 18851:/usr/lib/libreoffice/program/soffice.bin --writer --splash-pipe=5
開始:3月10日木曜日18:33:37終了:3月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 [email protected] --to [email protected]

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問題を生成してください。

関連情報