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中不起作用
通过弹性 beantalk 部署的 Node 应用程序的问题