有一些解决方案可以为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',
]
APP2 / 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
...
答案 0 :(得分:0)
为什么使用django_cron,当你只需要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:00
#* * * * * * 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
希望得到这个帮助,
答案 1 :(得分: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