背景
在 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
批处理文件。
完全策略
计划中可以看到上次运行的结果。
如果日志中出现“操作员或系统管理员拒绝了请求”这样的问题导致无法运行,可以通过更改安全策略来解决:
安全设置> 本地策略> 安全选项,双击右边的“域控制器:允许服务器操作员计划任务”,设置为启用即可。