有一些解决方案可以为 cronjobs 配置 .ebextension 容器命令,但没有一个对我有用。
我担心他们不工作的原因是因为.ebextensions
不在根目录中。这个凌乱的代码被交给了我,我试图移动.ebextensions
到它需要的地方,但这似乎破坏了其他一切。
这个应用程序是一个流媒体视频应用程序,目前正在生产中,我不能破坏它,所以我最终只是把它留在原处。
有人可以告诉我这样做是否正确,我只需要找到一种移动方式.ebextensions
还是我的 cronjob 配置中的问题?
app1/.ebextensions/02_python.config
container_commands:
...
cronjob:
command: "echo .ebextensions/cronjobs.txt > /etc/cron.d/cronjobs && 644 /etc/cron.d/cronjobs"
leader_only: true
...
app1/.ebextensions/cronjobs.txt
***** root source /opt/python/run/venv/bin/activate && python3 manage.py runcrons > /var/log/cronjobs.log
app1/settings.py
INSTALLED_APPS = [
...
'django_cron',
...
]
CRON_CLASSES = [
'app2.crons.MyCronJob',
]
应用程序2/crons
from django_cron import CronJobBase, Schedule
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 1
schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
def do(self):
# calculate stuff
# update variables
这将毫无错误地部署到 AWS 弹性 beanstalk,并且日志显示它正在运行,但工作没有完成,它只在部署时运行一次命令。日志显示了这一点。
Command cronjob] : Starting activity...
[2018-02-15T12:58:41.648Z] INFO [24604] - [Application update ingest16@207/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_api_backend/Test for Command 05_cronjob] :
Completed activity. Result:
Completed successfully
这可以完成这项工作,但仅在部署时执行一次。
container_commands:
...
cronjob:
command: "source /opt/python/run/venv/bin/activate && python3 manage.py runcrons"
leader_only: true
...
这根本行不通。
container_commands:
...
cronjob:
command: "echo /app1/.ebextensions/cronjobs.txt > /etc/cron.d/cronjobs && 644 /etc/cron.d/cronjobs"
leader_only: true
...