如何在程序完成时使用 mutt 向我发送通知
How to use mutt to send me notification when program is finished
我正在使用 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 很陌生。
你只需要这样的东西:
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
选项设置邮件的 subject。
更好的方法是将命令的要点放入 脚本,如下所示:
#!/bin/sh
cd $(dirname ) && nohup Rscript $(basename ) > $(basename .R)_out.txt;
echo "The job is finished" |mutt "your@email" -s "Your job"
并且(调用该文件 run-job
),通过
调用它
run-job /home/program/K_10/program_1.R
稍微分解一下:
run-job
的命名是为了暗示脚本的 function。脚本名称没有固定约定(由开发人员决定)。有些在名称上使用 ".sh"
后缀以使其类型更明显,但这不是必需的。
".R"
后缀是另一种命名约定,但 Rscript
可能需要。在任何情况下,它都是现有文件名的一部分。
</code> 是给脚本的 <em>参数</em>(或<em>参数</em>)。更完整的脚本可能会检查 (a) 参数是否存在以及 (b) 参数是否对应于现有文件,但为了简单起见,省略了这些步骤。</li>
<li> <code>$(dirname )
returns /home/program/K_10
和
-
$(basename .R)
取 /home/program/K_10/program_1.R
和 returns 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
我正在使用 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 很陌生。
你只需要这样的东西:
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
选项设置邮件的 subject。
更好的方法是将命令的要点放入 脚本,如下所示:
#!/bin/sh
cd $(dirname ) && nohup Rscript $(basename ) > $(basename .R)_out.txt;
echo "The job is finished" |mutt "your@email" -s "Your job"
并且(调用该文件 run-job
),通过
run-job /home/program/K_10/program_1.R
稍微分解一下:
run-job
的命名是为了暗示脚本的 function。脚本名称没有固定约定(由开发人员决定)。有些在名称上使用".sh"
后缀以使其类型更明显,但这不是必需的。".R"
后缀是另一种命名约定,但Rscript
可能需要。在任何情况下,它都是现有文件名的一部分。</code> 是给脚本的 <em>参数</em>(或<em>参数</em>)。更完整的脚本可能会检查 (a) 参数是否存在以及 (b) 参数是否对应于现有文件,但为了简单起见,省略了这些步骤。</li> <li> <code>$(dirname )
returns/home/program/K_10
和-
$(basename .R)
取/home/program/K_10/program_1.R
和 returnsprogram_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