程序完成后如何使用mutt向我发送通知

时间:2015-04-22 22:51:27

标签: linux shell email terminal mutt

我正在使用Linux。我希望计算机在程序完成后使用mutt向我发送电子邮件(学校不允许我们使用mail)。 我尝试了mutt,但效果很好。

我使用以下shell脚本来运行程序

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;

如何在程序完成后向我发送电子邮件。电子邮件应该有 The job /home/program/K_10/program_1.R is finished。另外,如果有可能,您可以帮我附上/home/program/K_10/program_1.txt,这是program_1.R的结果吗? 我对Linux很新。

1 个答案:

答案 0 :(得分:0)

你需要的就是这样:

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;
echo "The job /home/program/K_10/program_1.R is finished" |mutt "your@email" -s "Your job"

即,在脚本中首先执行作业,然后(按顺序)向自己发送邮件。 echo命令管道导入mutt,它将其用作邮件的内容。 -s选项设置邮件的主题

更好的方法是将命令的要点放入脚本中,如下所示:

#!/bin/sh
cd $(dirname $1) && nohup Rscript $(basename $1) > $(basename $1 .R)_out.txt;
echo "The job $1 is finished" |mutt "your@email" -s "Your job"

和(调用该文件run-job),通过

调用它
run-job /home/program/K_10/program_1.R

稍微分解一下:

  • run-job被命名为暗示脚本的功能。脚本名称没有设置约定(由开发人员决定)。有些人在名称上使用".sh"后缀使其类型更明显,但这并不重要。
  • ".R"后缀是另一种命名约定,但Rscript可能需要。无论如何,它都是现有文件名的一部分。
  • $1是指定给脚本的参数(或参数)。更完整的脚本可能会检查(a)参数是否存在以及(b)参数是否与现有文件相对应,但省略这些步骤以保持简单。
  • $(dirname $1)返回/home/program/K_10
  • $(basename $1 .R)接受/home/program/K_10/program_1.R并返回program_1
  • 对于这个简单的脚本,可以获取路径名的各个部分,并使用它们来制作比仅使用文字命令更通用的脚本。

nohup在这里很尴尬;我会把它从脚本中删除。然后,您可以直接控制脚本的运行方式,例如,

nohup run-job /home/program/K_10/program_1.R &

创建run-job等脚本时,您应该记得这样做:

  • 使其可执行,例如chmod u+x run-job
  • 将脚本放在$PATH上的目录中(例如许多系统上的$HOME/bin),或者注意使用其路径调用它。例如,如果它在当前目录中,您只需执行

    nohup ./run-job /home/program/K_10/program_1.R &

  • 为了隔离问题(我的拼写错误或其他原因),shell提供 trace 功能(实际命令将在运行时打印)。要打开跟踪,请将脚本的第一行更改为

    #!/bin/sh -x