我是一名计算科学家,我在 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” 是主题,回显会向邮件提供一些要发送给您的文本。
答案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
拒绝)/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 --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 问题。