【问题标题】:How to run command in the background and notify me via email when done如何在后台运行命令并在完成后通过电子邮件通知我
【发布时间】:2010-06-02 23:36:27
【问题描述】:

我有以下命令需要很长时间才能运行(几个小时)。我想让它成为一个后台进程,并让它在完成后向我发送一封电子邮件。

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

find . -type f -name "*.rm" -exec ./rm2mp3.sh \{} \; -exec rm \{} \;

我怎样才能用上面的命令做到这一点?

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:
    yourcommand 2>&1 | mail -s "yourcommand is done" yourname@example.com
    

    2>&1 位表示“让我的错误像常规输出一样”,其余的表示“获取常规输出并用一个漂亮的主题行邮寄给我”

    请注意,它不适用于csh shell 系列,仅适用于 Bourne(shbashksh...)、AFAIK。因此,在#!/bin/sh#!/bin/bash 下运行。 (注意,您可以使用 yourcommand |& mail ...csh 中传递两个描述符,但只有疯子才能使用 csh 编写脚本。)

    更新:

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

    如果您的意思是通过电子邮件发送已完成的事实,

    yourcommand 1>/dev/null 2>mylogfile ; (echo "done!" | mail -s "yourcommand is done")
    

    如果您的意思只是通过电子邮件发送错误(在这种情况下您不需要日志文件)(已修复为 @Trey 所说),

    yourcommand 2&>1 1>/dev/null | mail -s "yourcommand is done" yourname@example.com
    

    【讨论】:

    • 这样的问题是常规输出也会出现,而不仅仅是错误,对吧?
    • 如何将错误写入日志文件,然后在完成后通过电子邮件发送给我自己?
    • 太棒了!谢谢你的解释。最后一个问题,包含写入日志文件的写入命令是否在后台运行?我问是因为我尝试了它并关闭了我的 shell,它只是停止处理我的文件?最后我应该使用& 吗?
    • 我认为重定向实际上应该在最后一个命令上交换,以将 stderr 重定向到 stdout 并关闭 stdout:yourcommand 2>&1 1>/dev/null
    • @Abs:抱歉,您需要将命令放入脚本中才能使用nohup,因为它不适用于命令序列或管道。然后你可以做nohup scriptname &
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多