- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 AWS 上有一个现有的 Elastic Beanstalk flask 应用程序,它偶尔不会初始化并出现以下错误:
[Mon Jan 23 10:06:51.550205 2017] [core:error] [pid 7331] [client 127.0.0.1:43790] script timed out before returning headers: application.py
[Mon Jan 23 10:10:43.910014 2017] [core:error] [pid 7329] [client 127.0.0.1:43782] End of script output before headers: application.py
知道为什么会这样吗?最近我更改了项目的 requirements.txt
以包含 pandas==0.19.2
。在此更改之前,该程序会运行几天,然后返回相同的错误。更多日志/程序详情:
[Mon Jan 23 10:05:36.877664 2017] [suexec:notice] [pid 7323] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Jan 23 10:05:36.886151 2017] [so:warn] [pid 7323] AH01574: module wsgi_module is already loaded, skipping
AH00557: httpd: apr_sockaddr_info_get() failed for ip-10-55-254-33
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 23 10:05:36.887302 2017] [auth_digest:notice] [pid 7323] AH01757: generating secret for digest authentication ...
[Mon Jan 23 10:05:36.887797 2017] [lbmethod_heartbeat:notice] [pid 7323] AH02282: No slotmem from mod_heartmonitor
[Mon Jan 23 10:05:36.887828 2017] [:warn] [pid 7323] mod_wsgi: Compiled for Python/2.7.10.
[Mon Jan 23 10:05:36.887832 2017] [:warn] [pid 7323] mod_wsgi: Runtime using Python/2.7.12.
[Mon Jan 23 10:05:36.889729 2017] [mpm_prefork:notice] [pid 7323] AH00163: Apache/2.4.23 (Amazon) mod_wsgi/3.5 Python/2.7.12 configured -- resuming normal operations
[Mon Jan 23 10:05:36.889744 2017] [core:notice] [pid 7323] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Jan 23 10:06:43.542607 2017] [core:error] [pid 7328] [client 127.0.0.1:43786] Script timed out before returning headers: application.py
[Mon Jan 23 10:06:47.548360 2017] [core:error] [pid 7330] [client 127.0.0.1:43788] Script timed out before returning headers: application.py
[Mon Jan 23 10:06:51.550205 2017] [core:error] [pid 7331] [client 127.0.0.1:43790] Script timed out before returning headers: application.py
[Mon Jan 23 10:10:43.910014 2017] [core:error] [pid 7329] [client 127.0.0.1:43782] End of script output before headers: application.py
应用程序.py
import flask
from flask import request, Response
import logging
import json
import JobType1
import JobType2
import sys
application = flask.Flask(__name__)
application.config.from_object('default_config')
application.debug = application.config['FLASK_DEBUG'] in ['true', 'True']`
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@application.route('/', methods=['GET'])
def index():
logger.info("The message received was '/', no action taken")
response = Response("Success", status=200)
return response
@application.route('/StartJob', methods=['POST'])
def StartJob():
logger.info("!!start_job message received! This is the start job logger")
print("!!start_job message received! This is the start job printer")
response = None
if request.json is None:
response = Response("Error, no job specified.", status=400)
else:
message = dict()
try:
if request.json.has_key('TopicArn') and request.json.has_key('Message'):
message = json.loads(request.json['Message'])
job = message['job']
else:
message = request.json
job = message['job']
date_key = None
try:
date_key = message['runkey']
except Exception as e:
print "printing Exception:"
print e
pass
start_job(job, date_key)
response = Response("Called Job", status=200)
except Exception as ex:
logging.exception("There was an error processing this message: %s" % request.json)
response = Response("Error processing message", status=400)
return response
@application.route('/CronMessage', methods=['POST'])
def cron_message():
logger.info("!!Cron message received! This is the Cron Start Logger")
response = None
logger.info("About to print headers of CRON***")
job = request.headers.get('X-Aws-Sqsd-Taskname')
start_job(job, None)
response = Response("Called Job", status=200)
return response
def start_job(job_name, date_key):
logger.info("JOB NAME SUBMITTED IS:")
logger.info(job_name)
if job_name == 'JobType1':
start_job_if_not_running(job_name, JobType1.main, True, date_key)
if job_name == 'JobType2':
start_job_if_not_running(job_name, JobType2.main, True, date_key)
else:
print "Submitted job nome is invalid, no job started. The invalid submitted job name was %s" % job_name
def start_job_if_not_running(job_name, program_to_execute, uses_date_key_flag, date_key):
global running_jobs
logger.info("running_jobs are:")
logger.info(running_jobs)
if job_name in running_jobs:
logger.info("Currently running job " + job_name + ", will not start again.")
return False
else:
try:
running_jobs.append(job_name)
if uses_date_key_flag:
logger.info("")
program_to_execute(date_key)
else:
program_to_execute()
except Exception as e:
handle_job_end(job_name)
print "Error in " + job_name
error_message = str(e) + "-" + str(sys.exc_info()[0])
print error_message
EmailUsers.main(subject="Error in " + job_name,
message=error_message,
message_type='error',
date_key=date_key,
job_name=job_name,
process_name='application.py',
notification_group='bp_only')
handle_job_end(job_name)
def handle_job_end(job_name):
while job_name in running_jobs:
running_jobs.remove(job_name)
logger.info("Process Complete")
if __name__ == '__main__':
application.run(host='0.0.0.0', threaded=True)
感谢任何帮助,我可以根据需要分享其他文件中的更多代码。
此外,如果我导航到 /etc/httpd/conf.d/wsgi.conf
,我会看到:
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On
<VirtualHost *:80>
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/application.py
<Directory /opt/python/current/app/>
Require all granted
</Directory>
WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python2.7/site-packages:/opt/python/run/venv/lib/python2.7/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
最佳答案
@user2752159 的回答强调了这个问题,但我将添加这个来展示如何在 AWS Beanstalk 的上下文中解决这个问题(即,如果一个新实例或您部署了更多代码,那么问题将保持不变,而不是而不是每次都必须通过 ssh 进入框来修改 wsgi.conf
)。
创建文件。 (注意它以 *.config 而不是 conf 结尾)
nano .ebextensions/<some_name>.config
将以下内容添加到 some_name.config
( mod_wsgi docs )
files:
"/etc/httpd/conf.d/wsgi_custom.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIApplicationGroup %{GLOBAL}
添加到 git
git add .ebextensions/<some_name>.config
git commit -m 'message here'
部署到beanstalk
eb deploy
现在每次部署时,WSGIApplicationGroup %{GLOBAL}
都会添加到 wsgi_custom.conf
中,从而解决问题。
关于python - AWS Elastic Beanstalk - 脚本在返回 header : application. py 之前超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41812497/
我正在尝试将我的应用程序上载到Elastic Beanstalk,但是在节点预gyp安装--fallback-to-build上,npm安装失败。我尝试了各种版本的节点,但无济于事。似乎正在尝试获取一
每当我在 Elastic Beanstalk 中创建新环境时,我都会手动配置自定义 AMI ID、SNS 通知等,但我想自动完成,即,将设置(自定义 AMI ID、SNS、 key 对等)保存到一个配
我已使用以下方法连接到 Elastic Beanstalk: eb ssh XXXXXX --profile=xx 现在我想将一个文件复制到我的本地机器上,我该怎么做? 最佳答案 找出与 scp 一起
对于典型的 Java Web 应用程序,使用 Elastic Beanstalk 相对于手动创建 EC2 实例、设置 tomcat 服务器和部署等有哪些优势?负载平衡、监控和自动缩放是唯一的优势吗?
我有两个Elastic Search版本,一个是 7.3 ,另一个是 7.1 。我正在将flattened数据类型用于 Elastic Search 7.3 ,并且我也想在 Elastic Searc
我是 Elastic 和 spring-data-elastic 的新手。我一直在此处和网络的其他区域进行搜索,但到目前为止尚未找到我的问题的答案。我希望 SO 能够提供帮助。 我正在为我的Users
我有一个运行 PHP 的弹性 beanstalk 环境。在我的项目中,我有一个 .ebextensions 文件夹和一个名为“15-memorymonitor.config”的文件,其中包含以下内容;
我有 “更新”:Dockerrun.aws.json 中的“真” 当我更新 ECR 中的图像时,它应该自动更新 EC2 iontance 中的图像和容器。 但是当我在推送新图像后通过 ssh 进入实例
我有一个定义 Elastic Beanstalk 应用程序的 CloudFormation 模板。 我想扩展这个应用程序,即我希望端口 80 上的监听器重定向到 HTTPS。 AWS::Elastic
我在使用自定义 .ebextensions 文件部署 EB 实例时遇到问题。这是该文件中的相关部分: container_commands: 01_migrate: command: 'p
我已经使用带负载均衡器的 Elastic Beanstalk 创建了一个环境,并在各自的配置中分配了所有健康检查值 我也为ELB设置了应用健康检查url 但是当我检查自动缩放组配置时,健康检查类型是
我想使用 OpenTelemetry 将跟踪/指标数据导出到 Elastic Search,但我更愿意避免使用 Elastic APM。是否可以?opentelemetry 贡献 repo显然暗示这是
我正在尝试部署我的 角申请通过GitHub Actions到 Elastic Beanstalk 。我正在使用这个 GitHub actions用于部署到 ELB。 我的问题是,部署失败,因为 ELB
我已阅读有关 Deploying Versions with Zero Downtime 的 AWS 文档,又名 CNAME 交换。 如 yegor256在 this answer 中有解释: The
我们在我们的一个应用程序服务器上安装了 Elastic 5.6.10 和 HibernateSearch ORM 5.11.4.Final,现在我们计划通过我们的一个微服务(spring boot,但
我正在使用 AWS Elastic beanstalk 并希望为不同的环境配置不同的 ENV 变量。我发现的唯一方法是使用 ebextensions,但如果我将同一个数据包部署到多个环境,则无法覆盖在
我有一个应用程序,其中包含 nodejs 和 php 代码。 nodejs 用于运行应用程序所需的几个脚本。我如何使用 aws Elastic beanstalk 部署此类应用程序? 最佳答案 有两种
我打算将 MP4(1920x1080,比特率可能因 mp4 而异)转换为 HLS(不同类型的分辨率)。 不同类型的分辨率,我正在寻找 1080p = 1920x1080 720p = 1280x720
我不断收到以下消息。但是在我的 nginx 日志中没有任何内容表明返回的请求状态为 5xx。此外,应用程序似乎按预期工作。我可能会得到这些的任何指示? 留言: Environment health h
我们如何使用 bitbucket 管道更新 aws elastic beanstalk 上的 asp.net 核心网站? 最佳答案 我知道这是迟到的答案,但几天前我做了同样的事情,所以这里是我是如何做
我是一名优秀的程序员,十分优秀!