首页 文章

在没有cron的AWS中运行计划任务

提问于
浏览
56

目前我在亚马逊有一台服务器,我把我所有的cronjobs . 我想消除这个单点故障,并将我的所有任务公开为Web服务 . 我想将VPC ELB背后的服务公开给几个将在调用时运行任务的服务器 .

亚马逊(AWS)提供的某些服务是否可以按计划的时间间隔运行重复发生的作业(真正称为Web服务)?我真的希望能够在时间/日规范方面保留cron功能,但是将驱动程序的HA(在正确的时间调用 endpoints 的东西)分配给AWS .

我喜欢SQS如何提供Web endpoints ,但我可以告诉你不能安排它们 . SWF似乎也不合适 .

9 回答

  • 3

    介绍 Events in AWS Cloudwatch

    您可以按分钟,每小时,每天或使用控制台和没有Lambda或任何编程使用CRON表达式进行计划 .

    我只是使用SNS HTTP endpoints 安排我的ASP.net WEB API(HTTP Post)来执行每一分钟并且它工作正常 .

    enter image description here

  • 7

    This a hosted third party site that can regularly call scheduled scripts on your domain.

    如果您需要在shell中运行脚本而不是Apache,那么这将不起作用 .

  • 0

    看起来这是来自AWS BeanStalk的相对较新的选项:

    https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

    基本上,它们的行为类似于常规SQS接收器,但它们是在cron调度上调用的,而不是响应SQS消息 .

  • 8

    AWS Elastic Load Balancers将ping您的实例以检查它们是否 Health . 您可以将类似cron的任务添加到ELB正在ping的脚本中,并且它将定期执行 .

    您需要添加一些逻辑,以便每个任务以正确的间隔执行适当的次数,但这可以通过跟踪执行的数据库表来完成 . 每次ELB ping服务器时,服务器都会检查数据库以查看是否有任何作业挂起,然后执行该作业 .

    如果脚本执行时间过长,ELB将会超时,因此不要创建ELB运行状况检查需要很多秒才能处理cron任务的情况 . 要解决此问题,您可以使用AWS Simple Notification Service . 您的ELB运行状况检查脚本可以简单地将消息发布到SNS主题,然后该主题可以通过HTTP请求将消息传递到Web服务器 .

    换句话说:ELB ping您的EC2实例... EC2实例检查待处理的作业并向SNS发送消息(如果找到)... SNS通过HTTP通知您的应用...来自SNS的HTTP调用是实际处理的cron job

  • 58

    亚马逊(AWS)提供的某些服务是否可以按计划的时间间隔运行重复出现的作业?

    这是人们(包括我)在使用AWS设计架构时不断提及的几个单点故障之一 . 在亚马逊通过服务解决它之前,我发布了一些被一些公司积极使用的黑客 .

    AWS Auto Scaling可以使用以cron格式指定的定期计划来运行和终止实例 .

    http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html

    您可以让实例在启动时自动运行进程 .

    如果您不知道作业将持续多长时间,您可以进行设置,以便作业在完成后终止实例 .

    这是我写的一篇文章,它介绍了设置它所需的确切命令:

    使用Auto Scaling在循环计划上运行EC2实例http://alestic.com/2011/11/ec2-schedule-instance

    开始一个完整的实例只是为了开始一组工作似乎有点像矫枉过正,但如果它是一个t1.micro,那么它只需花费几美分 .

    t1.micro也不必做实际的工作 . 您的实例可以将消息注入SQS或通过SNS,以便其他冗余服务器接收任务 .

  • -1

    听起来像这样对你有用:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

    Task Runner是一个任务代理应用程序,它轮询AWS Data Pipeline以查找计划任务,并在Amazon EC2实例,Amazon EMR集群或其他计算资源上执行它们,并报告其状态 . 根据您的应用程序,您可以选择:允许AWS Data Pipeline在您自动管理的计算资源上为您安装和管理一个或多个Task Runner应用程序 . 在这种情况下,您无需按照本节中的说明安装或配置Task Runner . 这是推荐的配置 . 在计算资源(例如长时间运行的EC2实例或物理服务器)上手动安装和配置Task Runner . 为此,请使用本节中的过程 . 开发并安装自定义任务代理而不是任务运行器 . 执行此操作的过程取决于自定义任务代理的实现 .

  • 0

    SWF是AWS的Web服务,可用于计划任务 . 大部分工作都用于指定任务和计划的内容 .

    http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html是针对SWF编写的可伸缩调度程序 .

  • 3

    AWS announced支持Lambda在2015 re:Invent Session 中的计划功能 . 有了这个功能用户可以使用类似cron的语法按计划执行Lambda函数 . Lambda docs show an example使用Python来执行预定事件 .

    目前,计划的lambda可以运行的最小分辨率是1分钟(与cron相同,但不像systemd计时器那样精细) .

    Lambder项目有助于简化Lambda上预定函数的使用 .

    λ Gordon's cron example可能是用于部署预定lambda函数的最简单接口 .


    原始答案,为子孙后代保存 .

    正如Eric Hammond和其他人所说,对于计划任务,没有本机AWS服务 . 其他答案中提到的只有解决方法和一半解决方案 .

    要回顾一下当前的选择:

    • 如Eric Hammond所述,按计划启动和停止的单实例自动缩放组 .

    • Using a Simple Workflow Service timer,这一点都不直观 . 这个case study提到JPL使用SWF来构建分布式cron,但是没有实现细节 . 还有对掩埋在SWF代码示例中的code example的引用 .

    • 使用cronlock之类的东西自己运行 .

    • 使用类似Unreliable Town Clock (UTC)之类的东西按计划运行Lambda函数 . 请记住,Lambda当前无法访问VPC中的资源

    希望很快能有更好的解决方案 .

  • 4

    亚马逊去年为NodeJS推出了Lambda,yesterday亚马逊增加了预定功能,VPC支持和Python支持功能 .

    通过利用预定功能 - 可以实现CRON的正确替换 .

    更多信息 - http://aws.amazon.com/lambda/details/

    enter image description here

相关问题