Amazon Web Services - 如何每天运行脚本

时间:2017-01-30 23:41:41

标签: r amazon-web-services

我有一个R脚本,我每天都会运行来自几个不同网站的数据,然后将数据写入几个不同的CSV文件。每天,在特定时间(每天更改)我打开RStudio,打开文件,然后运行脚本。我检查它每次都正确运行,然后我将输出保存为CSV文件。每天必须这样做通常很痛苦(每天需要大约10-15分钟)。如果我能在预先定义的特定时间自动运行此脚本,我会很喜欢它,我的伙伴说AWS能够做到这一点吗?

这是真的吗?如果是这样,AWS能够做到这一点的具体功能/方面是什么,这样我可以更多地了解它?

谢谢!

4 个答案:

答案 0 :(得分:5)

有两种选择可以考虑这个问题:

  • 在其上托管带有 R 的EC2实例并配置CRON-Job以定期执行您的R脚本。
    一种简单的入门方式:使用this AMI 要执行脚本,R提供CLI rscript。参见例如here关于如何设置
  • 无服务器:AWS Lambda是托管的微服务。目前 R 本身不受支持,但在官方AWS博客here上,他们提供了有关如何运行R的分步指导。基本上,您可以从Python执行 R 使用rpy2 - 套餐 完成此设置后,通过CloudWatch Events(〜托管的cron-job)安排该功能。 Here您可以找到有关如何执行此操作的分步指南 还有一件事:您说您的函数输出CSV文件:要正确保存它们,您需要将它们放到像AWS-S3这样的文件存储中。你可以通过aws.s3 - 包来做到这一点。另一种选择是使用lambda函数中预装的AWS SDK for python。你可以,例如将csv文件写入/tmp/ - dir,然后在 R 脚本完成后,通过boto3's S3 upload_file function将文件移至S3。

恕我直言,第一个选项更容易设置,但第二个选项更强大。

答案 1 :(得分:1)

这有点违反直觉,但您可以使用Cloudwatch并定期运行事件规则。它可以运行Lambda或将消息发送到SNS主题或SQS队列。您将遇到的挑战是Lambda不支持R,因此您必须让Lambda启动其他内容或者等待SNS主题或SQS队列为您运行脚本。它不是一个完美的解决方案,因为可能存在相当多的移动部件。

答案 2 :(得分:1)

@stdunbar关于使用CloudWatch Events来触发lambda函数是正确的。您可以设置触发器的频率或使用Cron。但正如他所提到的,Lambda本身并不支持R。

这可以帮助您将R与Lambda一起使用:R Statistics ready to run in AWS Lambda and x86_64 Linux VMs

答案 3 :(得分:0)

如果您正在运行Windows,更简单的解决方案之一是编写.BAT脚本来运行您的R脚本,然后使用Window的任务调度程序根据需要运行。

要从批处理文件中调用R脚本,请使用以下语法:

C:\Program Files\R\R-3.2.4\bin\Rscript.exe" C:\rscripts\hello.R

只需验证“RScript”应用程序的路径,并且您的R代码是正确的。