AWS弹性beantalk cron作业

Posted

技术标签:

【中文标题】AWS弹性beantalk cron作业【英文标题】:AWS elastic beanstlk cron job 【发布时间】:2020-11-15 03:01:46 【问题描述】:

我正在使用AWS elastic beanstalk 在python 中部署flask

我使用threading.timer()编写代码是因为我想每隔一定时间爬一次,但它在本地环境中可以工作,但在部署到AWS时就不行。

首先,是什么原因??

其次,我知道我需要在.ebextension 文件中创建一个.config 文件,以便在弹性beantalk 上进行cron 作业。

https://aws.amazon.com/en/premiumsupport/knowledge-center/cron-job-elastic-beanstalk/

我看到了上面的链接,但是由于它是通过.sh文件的示例,我真的不知道如何应用它。

因此,我们非常感谢您对如何进行 cron 抓取提供帮助。

以下是文件路径的状态。

-.ebextensions >- cron-linux.config

-静态

-模板

-application.py

-requirements.txt

-Enterprise.txt

-crowler.py

【问题讨论】:

您完全按照您提供的链接进行操作。在myscript.sh 中,您将调用您的python 脚本。 你能给我举个例子吗?我不知道该怎么办 示例在您提供的链接中。我没有用于抓取的 python 脚本。但我可以向您保证链接中的示例有效。我在自己的 EB 上使用它。所以你需要根据你的具体用例和 python 脚本来调整它。 例如,允许您每 5 分钟将当前时间保存在 .txt 文件中的代码呢? .txt 文件与 application.py 位于同一路径中。 【参考方案1】:

就像链接中的示例一样。您只需将 cron 计划更改为 5 分钟,路径是保存 date。您可以尝试以下方法:

在您的应用中,您可以有一个名为 crowler.py 的 python 文件:

import time 
now = time.strftime('%H%M%S') 
f=open('Enterprise.txt','w',encoding='UTF-8') 
f.write(str(now)) 
f.close()
files:
    "/etc/cron.d/mycron":
        mode: "000644"
        owner: root
        group: root
        content: |
            */5 * * * * root /usr/local/bin/myscript.sh

    "/usr/local/bin/myscript.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash

            python3 /var/app/current/crowler.py

            exit 0

commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/mycron.bak"

【讨论】:

非常感谢您这样做。但我想用 python 代码保存 .txt 文件,如下所示。 import time now = time.strftime('%H%M%S') f=open('Enterprise.txt','w',encoding='UTF-8') f.write(str(now)) f.close() 非常感谢。让我们根据这段代码添加它。 @김준우 没问题。如果答案有帮助,我们将不胜感激。 如上修改cron-linux.config文件和crowler.py,用.zip压缩,部署到elastic beanstalk后,.txt文件5分钟后不更新,但保留原来的内容。我修改了上面的文件路径,但是有什么问题呢?我已经测试了在网页上加载 .txt 文件以查看它是否得到更新。 @김준우 你好。抱歉,应该有python3,而不是python。此外,Enterprise.txt 将在 /root 文件夹中创建,因为 cron 以 root 身份运行。请记住,您的应用程序以webapp 用户身份运行,因此它无法访问root 创建的任何文件。您必须根据您的要求调整所有权限和路径。

以上是关于AWS弹性beantalk cron作业的主要内容,如果未能解决你的问题,请参考以下文章

cron作业中的Rails类方法在弹性beantalk中不起作用

弹性豆茎和 django 的 Cron 作业

使用弹性 beantalk 运行后台作业

通过弹性 beantalk 部署的 Node 应用程序的问题

使用 aws eb 和 laravel 任务调度的 Cron 作业

部署到弹性 beantalk 时出错 - 未知作业:nodejs