0

有一些解决方案可以为 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
  ...
4

2 回答 2

0

您的 cron 文件中需要 * 之间的空间:

你的 cronfile :

***** root source /opt/python/run/venv/bin/activate && python3 manage.py runcrons > /var/log/cronjobs.log

像这样修复它:

* * * * * root source /opt/python/run/venv/bin/activate && python3 manage.py runcrons > /var/log/cronjobs.log
于 2018-02-17T00:18:11.203 回答
0

嗨,当您只需要 cron 时,为什么要使用 django_cron?

这是我的配置 .ebextensions:

container_commands:
  ...
  0.0.1.cron.mailing:
    command: "cat .ebextensions/mailing.txt > /etc/cron.d/mailing && chmod 644 /etc/cron.d/mailing"
    leader_only: true

这是我的mailing.txt:

每天早上 05:00am

#* * * * * * command
#| | | | | | |
#| | | | | | + Comande Line
#| | | | | +-- Year              (range: 1900-3000)
#| | | | +---- Day of the Week   (range: 1-7, 1 standing for Monday)
#| | | +------ Month of the Year (range: 1-12)
#| | +-------- Day of the Month  (range: 1-31)
#| +---------- Hour              (range: 0-23)
#+------------ Minute            (range: 0-59)

# m h dom mon dow command
0 5 * * * root source /opt/python/run/venv/bin/activate && source /opt/python/current/env && cd /opt/python/current/app/ && python manage.py  my_command >> /home/ec2-user/cron-mailing.log 2>&1

在这里如何创建自定义命令:https ://docs.djangoproject.com/en/2.0/howto/custom-management-commands/#module-django.core.management

希望这有帮助,

于 2018-02-15T14:35:43.477 回答