我有一个Rscript文件(Main_Script.R)Main_Script.R,它每30分钟在Windows任务计划程序中作为一个重要的工作运行.在- 我有大约13个脚本,每30分钟运行一次.
我希望从R发送电子邮件 - 每当迭代失败或被骚扰时.我正在使用sendMailR包 - 我在SO中看过一篇文章how to send email with attachment from R in windows- 关于如何从R Windows发送emqil.
但我不确定 - 如何发送email automatically with the error message- 当计划任务迭代失败或受到攻击时.
我的Main_Script.R- 有source13个代码.
source(paste(rootAddress,"Scripts/Part1.R",sep =''))
source(paste(rootAddress,"Scripts/Part2.R",sep =''))
:
:
:
:
source(paste(rootAddress,"Scripts/Part13.R",sep =''))
Run Code Online (Sandbox Code Playgroud)
我的Sheduled任务看起来像下面的日志文件
"D:\xxx\R-3.0.2\bin\x64\Rscript.exe" "D:\xx\Batch_Processing\Batch_Processing_Run\Scripts\Main_Test.R" >> "D:\XXX\Batch_Processing\Batch_Processing_Run\error.txt" 2>&1
Run Code Online (Sandbox Code Playgroud)
更新:
当脚本遇到错误时 - 它应该触发电子邮件 - 使用erorr meassge和脚本名称或编号 - 来表示13个脚本中的哪一个失败并发送到邮件ID.
这是一个包装你的源代码的解决方案:
tryCatch({
source("fail1.R")
source("fail2.R")
source("fail3.R")
},
error=function(e){cat("send email with error ",e$message,"\n")})
Run Code Online (Sandbox Code Playgroud)
我的脚本是:
if(x==1){stop("Fail One!")}
Run Code Online (Sandbox Code Playgroud)
和类似的.因此:
> x=22
> source("doall.R")
> x=2
> source("doall.R")
send email with error Fail Two!
Run Code Online (Sandbox Code Playgroud)
所以用我cat的电子邮件发送和完成工作替换我.错误作为参数传递给处理程序,以便您可以从中获取消息.
以下是如何使用13个脚本编写的示例,并确定哪个出错了:
for(i in 1:13){
try( {
source(paste(rootAddress,"Scripts/Part",i,".R",sep =''))
},
error = function(e){mailMe(i, e$message)}
)
}
Run Code Online (Sandbox Code Playgroud)
现在你只需要编写mailMe函数,它获取脚本的编号和错误消息.它可能是这样的:
mailMe = function(i, message){
subject=paste("Error in script ",i)
body = paste("Error was ",message," in script ",i)
someSendmailRfunction(to="me@my.come", subject=subject,body=body, etc=etc)
}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以mailMe单独测试该功能,直到它工作.
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |