私はコンピュータサイエンティストで、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
依存性応答:
atd
デーモンの実行(ps -ef|grep atd
)atd
/config によって拒否されずにジョブを送信できます。/etc/at.deny
/etc/at.allow
- 機能性
sendmail
MTA
ほとんどのシステムはこれらの要件を満たしていますが、確認する価値があります。
答え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問題を生成してください。