125

我编写了一个 R 脚本,它从数据库中提取一些数据,对其执行多项操作并将输出发布到新数据库。

我希望这个脚本每天在特定时间运行,但我找不到任何有效的方法。

任何人都可以推荐一个我可以查看的资源来解决这个问题吗?我在 Windows 机器上运行这个脚本。

4

7 回答 7

116

实际上,在 Windows 下,您甚至不必先创建批处理文件即可使用Scheduler

  • 打开调度器:开始 -> 所有程序 -> 附件 -> 系统工具 -> 调度器
  • 创建一个新任务
  • 在选项卡操作下,创建一个新操作
  • 选择启动程序
  • 浏览到应该放置在此处 的Rscript.exe ,例如:
    “C:\Program Files\R\R-3.0.2\bin\x64\Rscript.exe”
  • 在参数字段中输入文件的名称
  • 在Start in字段中输入要找到脚本的路径
  • 转到触发器选项卡
  • 创建新触发器
  • 选择该任务应该每天,每月,......重复几次,或者任何你喜欢的
于 2014-02-04T09:24:14.713 回答
60

假设您的 R 脚本mytest.r位于 中D:\mydocuments\,您可以创建一个包含以下命令的批处理文件:

C:\R\R-2.10.1\bin\Rcmd.exe BATCH D:\mydocuments\mytest.r

然后将其作为新任务添加到 windows 任务调度程序,在那里设置触发条件。

您也可以省略批处理文件。在任务调度程序C:\R\R-2.10.1\bin\Rcmd.exe的文本框中设置,并作为初始命令的其余部分给出:program/scriptArgumentsBATCH D:\mydocuments\mytest.r

通过 Windows 任务计划程序计划 R 任务(发布于 2015 年 2 月 11 日)

taskscheduleR:使用 Windows 任务管理器安排 R 脚本的 R 包(发布于 2016 年 3 月 17 日)

编辑

我最近再次采用了批处理文件的使用,因为我希望将 cmd 窗口最小化(我找不到其他方法)。

具体来说,我Actions按如下方式填写 Windows 任务计划程序选项卡:

Program/script:

命令文件

Add arguments (optional):

/c 开始 /min D:\mydocuments\mytest.bat ^& 退出

mytest.bat 的内容

C:\R\R-3.5.2\bin\x64\Rscript.exe D:\mydocuments\mytest.r 参数

于 2010-05-08T10:02:55.537 回答
11

现在 RStudio 中有内置选项来执行此操作,首先运行调度程序安装在包下面

  install.packages('data.table')
  install.packages('knitr')
  install.packages('miniUI')
  install.packages('shiny')
  install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = 
  "source")

安装后转到

**TOOLS -> ADDINS ->BROWSE ADDINS ->taskscheduleR -> Select it and execute it.**

在此处输入图像描述

于 2019-02-21T05:51:01.093 回答
8

设置任务调度程序

步骤 1) 打开任务计划程序(开始 > 搜索任务计划程序)

步骤 2) 单击“操作”>“创建任务”

步骤 3) 选择“仅在用户登录时运行”,取消选中“以最高权限运行”,命名您的任务,配置为“Windows Vista/Windows Server 2008”

在此处输入图像描述

步骤 4) 在“触发器”选项卡下,设置您希望脚本运行的时间

步骤 5) 在“Actions”选项卡下,将 Rscript.exe 文件的完整位置,即

"C:\Program Files\R\R-3.6.2\bin\Rscript.exe" (include the quotes)

将脚本的名称与 with-esource()in 参数一起包装,如下所示:

-e "source('C:/location_of_my_script/test.R')"

在此处输入图像描述

对任务计划程序中计划的 Rscript 进行故障排除

当您使用任务计划程序运行脚本时,很难解决任何问题,因为您不会收到任何错误消息。

这可以通过使用sink()R 中的函数来解决,该函数允许您将所有错误消息输出到您指定的文件。您可以这样做:

# Set up error log ------------------------------------------------------------
error_log <- file("C:/location_of_my_script/error_log.Rout", open="wt")
sink(error_log, type="message")

try({

# insert your code here

})

要使 Rscript 正常工作,您必须更改的另一件事是指定脚本中任何文件路径的完整文件路径。

这在任务调度程序中不起作用:

source("./functions/import_function.R")

您将需要指定您在 Rscript 中采购的任何脚本的完整文件路径:

source("C:/location_of_my_script/functions/import_function.R")

此外,我将从您在 R 脚本中引用的任何文件路径中删除任何特殊字符。例如:

df <- fread("C:/location_of_my_data/file#2342.csv")

可能无法运行。相反,请尝试:

df <- fread("C:/location_of_my_data/file_2342.csv")
于 2020-03-03T14:13:10.420 回答
4

SCHTASKS我通过程序设置了我的任务。对于在启动时运行脚本,你会写一些类似的东西

SCHTASKS /Create /SC ONSTART /TN MyProgram /TR "R CMD BATCH --vanilla d:\path\to\script.R"

有关更多详细信息,请参阅此网站SCHTASKS微软网站上的更多细节。

于 2011-07-16T15:07:03.767 回答
3

您可以使用Windows 任务计划程序

于 2010-05-08T08:19:00.367 回答
1

按照这些步骤的任意组合并"Argument Batch Ignored"在 R.exe 运行后收到错误后,试试这个,它对我有用。

在 Windows 任务计划程序中:

BATCH "C:\Users\desktop\yourscript.R"在参数字段中替换

CMD BATCH --vanilla --slave "C:\Users\desktop\yourscript.R"

于 2017-08-07T20:44:23.700 回答