【发布时间】:2018-01-03 18:51:53
【问题描述】:
在 Elastic Beanstalk 上部署环境时,我一直致力于配置 cron 作业。该作业的目的是每 30 分钟运行一次,并执行一个 Node.js 脚本来处理我们系统中的 SMS 时间表;当计划就绪时,将通过 Twilio api 发送一条 SMS 消息。
不幸的是,Node.js 环境没有文件/opt/elasticbeanstalk/support/envvars 包含定义的环境变量(也许我遗漏了什么?)。
为了解决这个问题,我在 Python 中从 /opt/elasticbeanstalk/bin/get-config 加载环境变量,然后执行我的 Node.js 脚本。
一切都按预期工作所以希望这可以帮助处于相同情况的人;但是,我想知道是否有更好的方法来实现这一点...欢迎提出建议。
在我的 .ebextensions 文件夹中,我有 cron 的配置文件:
files:
"/etc/cron.d/process-sms-schedules":
mode: "000644"
owner: root
group: root
content: |
*/30 * * * * root /usr/local/bin/process-sms-schedules.sh
"/usr/local/bin/process-sms-schedules.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
# Execute script to process schedules
python /var/app/current/process-sms-schedules.py > /var/log/process-sms-schedules.log
exit 0
commands:
remove_old_cron:
command: "rm -f /etc/cron.d/*.bak"
这是作为 cron 作业的一部分执行的 Python 脚本:
#!/usr/bin/env python
import os
import subprocess
from subprocess import Popen, PIPE, call
import simplejson as json
envData = json.loads(Popen(['/opt/elasticbeanstalk/bin/get-config', 'environment'], stdout = PIPE).communicate()[0])
for k, v in envData.iteritems():
os.environ[k] = v
call(["babel-node", "/var/app/current/process-sms-schedules.js"])
提前感谢您的任何反馈。
参考文献
How to set environment variable in Amazon Elastic Beanstalk (Python)
【问题讨论】:
标签: amazon-web-services cron amazon amazon-elastic-beanstalk