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 命令失败时,日志将转储错误或它下面的任何控制台输出(即 headtail)。在计划作业后定期检查日志。

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 参数中的 运行 绝对路径。