R 代码在一台计算机上运行良好,但在另一台计算机上运行不佳(通过 RScript.exe 中的任务计划程序)
R code runs well on one computer but not on another (via Task Scheduler in RScript.exe)
我的问题是:当我在 RScript.exe 中的一台笔记本电脑上通过 Task Scheduler 运行 执行以下代码时,我得到了所需的输出;那就是电子邮件已发送。但是当我 运行 通过 Task Scheduler 在 RScript.exe 中的另一台机器上使用相同的代码时,它不会 运行。另一台机器(机器2)能够发送电子邮件(当只有电子邮件的代码是运行),所以我认为问题出在以下部分。
results <- get_everything(query = q, page = 1, page_size = 2, language = "en", sort_by = "popularity", from = Yest, to = 今天)
我找不到这里的问题所在。有人可以帮我解决这个问题吗?
我的代码是:
library(readxl)
library(float)
library(tibble)
library(string)
library(data.table)
library(gt)
library(tidyquant)
library(condformat)
library(xtable)
library(plyr)
library(dplyr)
library(newsanchor)
library(blastula)
Today <- Sys.Date()
Yest <- Sys.Date()-1
results <- get_everything(query = "Inflation", page = 1, page_size = 2, language =
"en", sort_by = "popularity", from = Yest, to = Today, api_key =
Sys.getenv("NEWS_API_KEY"))
OP <- results$results_df
OP <- OP[-c(1, 5:9)]
colnames(OP) <- c("News Title", "Description", "URL")
W <- print(xtable(OP), type="html", print.results=FALSE, align = "l")
email1 <-
compose_email(
body = md(
c("<tr>", "<td>", "<table>", "<tr>", "<td>", "<b>", "Losers News", "</b>", W,
"</td>", "</tr>", "</table>","</td>", "<td>")
)
)
email1 %>%
smtp_send(
from = "abc@domain.com",
to = "pqr@domain.com",
subject = "Hello",
credentials = creds_key(
"XYZ"
)
)
无论何时安排作业,请考虑使用命令行 shell(例如 PowerShell)或 Bash 来处理自动化步骤、捕获和记录错误和消息。 Rscript 在第二台机器上由于某些您无法确定的未知原因而失败,因为您没有从使用 TaskScheduler 的控制台收到任何错误消息。
因此,考虑 PowerShell 运行 所有需要的 Rscript.exe
调用和其他命令,并将所有错误捕获到带日期戳的日志文件中。下面的脚本将所有控制台输出重定向到包含消息的 .log 文件。当 Rscript
命令失败时,日志将转储错误或它下面的任何控制台输出(即 head
、tail
)。在计划作业后定期检查日志。
PowerShell 脚本 (另存为 .ps1 文件)
cd "C:\path\to\scripts"
& {
echo "`nAutomation Start: $(Get-Date -format 'u')"
echo "`nSTEP 1: myscript.R - $(Get-Date -format 'u')"
Rscript myscript.R
# ... ADD ANY OTHER COMMANDS ...
echo "`nCAutomation End: $(Get-Date -format 'u')"
} 3>&1 2>&1 > "C:\path\to\logs\automation_run_$(Get-Date -format 'yyyyMMdd').log"
命令行(在任务计划程序中使用)
Powershell.exe -executionpolicy remotesigned -File myscheduler.ps1
注意:要么更改 myscheduler.ps1
所在的 TaskScheduler 作业设置中的目录,要么更改 -File
参数中的 运行 绝对路径。
我的问题是:当我在 RScript.exe 中的一台笔记本电脑上通过 Task Scheduler 运行 执行以下代码时,我得到了所需的输出;那就是电子邮件已发送。但是当我 运行 通过 Task Scheduler 在 RScript.exe 中的另一台机器上使用相同的代码时,它不会 运行。另一台机器(机器2)能够发送电子邮件(当只有电子邮件的代码是运行),所以我认为问题出在以下部分。
results <- get_everything(query = q, page = 1, page_size = 2, language = "en", sort_by = "popularity", from = Yest, to = 今天)
我找不到这里的问题所在。有人可以帮我解决这个问题吗?
我的代码是:
library(readxl)
library(float)
library(tibble)
library(string)
library(data.table)
library(gt)
library(tidyquant)
library(condformat)
library(xtable)
library(plyr)
library(dplyr)
library(newsanchor)
library(blastula)
Today <- Sys.Date()
Yest <- Sys.Date()-1
results <- get_everything(query = "Inflation", page = 1, page_size = 2, language =
"en", sort_by = "popularity", from = Yest, to = Today, api_key =
Sys.getenv("NEWS_API_KEY"))
OP <- results$results_df
OP <- OP[-c(1, 5:9)]
colnames(OP) <- c("News Title", "Description", "URL")
W <- print(xtable(OP), type="html", print.results=FALSE, align = "l")
email1 <-
compose_email(
body = md(
c("<tr>", "<td>", "<table>", "<tr>", "<td>", "<b>", "Losers News", "</b>", W,
"</td>", "</tr>", "</table>","</td>", "<td>")
)
)
email1 %>%
smtp_send(
from = "abc@domain.com",
to = "pqr@domain.com",
subject = "Hello",
credentials = creds_key(
"XYZ"
)
)
无论何时安排作业,请考虑使用命令行 shell(例如 PowerShell)或 Bash 来处理自动化步骤、捕获和记录错误和消息。 Rscript 在第二台机器上由于某些您无法确定的未知原因而失败,因为您没有从使用 TaskScheduler 的控制台收到任何错误消息。
因此,考虑 PowerShell 运行 所有需要的 Rscript.exe
调用和其他命令,并将所有错误捕获到带日期戳的日志文件中。下面的脚本将所有控制台输出重定向到包含消息的 .log 文件。当 Rscript
命令失败时,日志将转储错误或它下面的任何控制台输出(即 head
、tail
)。在计划作业后定期检查日志。
PowerShell 脚本 (另存为 .ps1 文件)
cd "C:\path\to\scripts"
& {
echo "`nAutomation Start: $(Get-Date -format 'u')"
echo "`nSTEP 1: myscript.R - $(Get-Date -format 'u')"
Rscript myscript.R
# ... ADD ANY OTHER COMMANDS ...
echo "`nCAutomation End: $(Get-Date -format 'u')"
} 3>&1 2>&1 > "C:\path\to\logs\automation_run_$(Get-Date -format 'yyyyMMdd').log"
命令行(在任务计划程序中使用)
Powershell.exe -executionpolicy remotesigned -File myscheduler.ps1
注意:要么更改 myscheduler.ps1
所在的 TaskScheduler 作业设置中的目录,要么更改 -File
参数中的 运行 绝对路径。