1 min read

在Windows下定时执行R语言脚本

背景

在 Linux 下定时执行R脚本比较方便,在 Windows 下却麻烦得多。

最近有需要定期执行一些监控用的R语言脚本,在网上参考了一些文章并实践后记录如下,便于后续用到时参考。

目标

在 Windows 计划任务中创建定期执行的任务,用来运行R脚本。

R语言实现

R脚本

先创建一个 R 脚本,文件命名为 test.R,代码参考如下:

x <- 5
print(x)
y <- 2*x + 3
Sys.sleep(5)
print(y)
cat(file = "run_log.txt", as.character(Sys.time()), "--", y , "\n", append = TRUE)

添加环境变量

打开环境变量对话框,路径如下:控制面板>系统>高级系统设置>环境变量

在用户变量中选择“Path”这个环境变量,点击编辑,可以添加环境变量的值,添加Rscript.exe 所在的路径比如 C:\Program Files\R\R-3.4.1\bin\x64

如果该变量只有一个值,则编辑不会出现图行加对话框,直接添加新变量值,与原有变量用分号“;”分隔即可。

在命令行中运行 Rscript

在 R 脚本文件所在的文件夹中,在空白处按住 Shift 键,并且点击鼠标右键,在弹出的对话框菜单中选择“在此处打开命行窗口”,直接进入命令行窗口界面,并进入改目录。

在打开的命令行窗口中输入Rscript test.R 运行脚本文件,如果提示找不到“Rscript”命令,则说明上面步骤中的环境变量设置是有问题的(如果重新设置环境变量,命令行窗口要重新打开);执行成功就说明可以执行R脚本了。

批处理文件

在相同的目录下,可以创建一个 test.bat 的批处理文件,这是windows上可以执行脚本的文件。

创建方法是用记事本等文本编辑器新建一个文本文件,内容输入

@echo off/on
Rscript test.R
exit

另存为文件的时候扩展名使用 .bat 即可。

双击 test.bat 文件就去执行其中的结果,其中包括了要执行 Rscript test.R ,正常情况下会执行脚本之后就退出。

上面的R脚本文件中包含了一个Sys.sleep(5)暂停5秒,就是为了使得命令行窗口停留几秒,否则会一闪而过。

上面的R脚本文件中还包含了一个cat(file = "run_log.txt", as.character(Sys.time()), "--", y , "\n", append = TRUE)的语句,使得每次执行都记录日志到 run_log.txt 文件中,便于查看和验证是否执行了,在什么时间执行过。

计划任务

在控制面板中找到“任务计划程序”,创建基本任务,在弹出的对话框中一步一步输入信息和选择触发机制,最终需要运行的程序就是test.bat批处理文件。

完全策略

计划中可以看到上次运行的结果。

如果日志中出现“操作员或系统管理员拒绝了请求”这样的问题导致无法运行,可以通过更改安全策略来解决:

安全设置> 本地策略> 安全选项,双击右边的“域控制器:允许服务器操作员计划任务”,设置为启用即可。