Linux 如何在后台运行命令并在完成后通过电子邮件通知我

Linux 如何在后台运行命令并在完成后通过电子邮件通知我,linux,bash,shell,Linux,Bash,Shell,我有下面的命令,它需要运行很长时间(几个小时)。我想让它成为一个背景过程,并为它发送电子邮件给我时,它完成了 对于顶部的cherry,它遇到的任何错误都应该在发生错误时写入文本文件 find . -type f -name "*.rm" -exec ./rm2mp3.sh \{} \; -exec rm \{} \; 我如何使用上述命令执行此操作 yourcommand 2>&1 | mail -s "yourcommand is done" yourname@example.c

我有下面的命令,它需要运行很长时间(几个小时)。我想让它成为一个背景过程,并为它发送电子邮件给我时,它完成了

对于顶部的cherry,它遇到的任何错误都应该在发生错误时写入文本文件

find . -type f -name "*.rm" -exec ./rm2mp3.sh \{} \; -exec rm \{} \;
我如何使用上述命令执行此操作

yourcommand 2>&1 | mail -s "yourcommand is done" yourname@example.com
2>&1
位写着“像常规输出一样犯错误”,其余的写着“把常规输出拿出来,用一行漂亮的主题寄给我”

请注意,它不适用于
csh
shell系列,仅适用于Bourne(
sh
bash
ksh
…),AFAIK。因此,请在
#下运行/bin/sh
#/bin/bash
。(注意:您可以使用
yourcommand |和mail…
csh
中导入这两个描述符,但只有疯子使用
csh
编写脚本)

更新:


如何将错误写入日志文件,然后在完成时发送电子邮件给自己

如果你的意思是通过电子邮件告诉我事情已经完成了

yourcommand 1>/dev/null 2>mylogfile ; (echo "done!" | mail -s "yourcommand is done")
如果您的意思是通过电子邮件发送错误(在这种情况下,您不需要日志文件)(修复为@Trey所述)


这样做的问题是,常规输出也会通过,而不仅仅是错误,对吗?我如何将错误写入日志文件,然后在完成时发送电子邮件给自己?太棒了!谢谢你的解释。最后一个问题,包含write to log文件的write命令是否在后台运行?我问是因为我尝试了它并关闭了shell,它只是停止了处理我的文件??我应该在最后使用
&
吗?我认为应该在最后一个命令上交换重定向,将stderr重定向到stdout并关闭stdout:
yourcommand 2>&11>/dev/null
@Abs:Sorry,为了使用
nohup
,您需要将命令放入脚本中,因为它不适用于命令序列或管道。然后您可以执行
nohup scriptname&
yourcommand 2&>1 1>/dev/null | mail -s "yourcommand is done" yourname@example.com