Tag: 信号

基于docker的Flask Rest API – 优雅的closures

我如何优雅地closures运行在Docker容器中的应用程序? 我的烧瓶应用程序正在服务一些REST API。 我想阻止对我的应用程序的所有电话,但“之前”退出,所有以前的请求应服务。 你有什么主意吗? 也许最好的select是捕获一个信号,以防NGINX应用程序负载将所有请求拖垮到我的应用程序,并执行一个nginx quit ..但我一般都在想..如果我不会使用NGINX,如果有什么办法的话它为FLASK应用程序。 我的Flask应用程序是这样的: ……. class TaskListAPI(Resource): def get(self): pass def post(self): pass class TaskAPI(Resource): def get(self, id): pass def put(self, id): pass def delete(self, id): pass api.add_resource(TaskListAPI, '/todo/api/v1.0/tasks', endpoint = 'tasks') api.add_resource(TaskAPI, '/todo/api/v1.0/tasks/<int:id>', endpoint = 'task') if __name__ == '__main__': app.run(host='0.0.0.0', debug=True) 基于 : uwsgi -s /tmp/yourapplication.sock –manage-script-name –mount […]

什么会导致中止信号被发送到一个Docker容器?

我的Web服务正在Docker容器中运行。 最近,我见过很多SystemExit错误,因为我使用的服务器( gunicorn )收到abort信号。 我已经检查了CPU Utilization和Memory Utilization监视器,但都是正常的,利用率不到50%,这似乎不可能是原因。 因为我可能在我的服务中请求下载,所以我想知道是由于文件处理程序用完了,但是我从未在我的日志中看到过相关的exception。 还有什么原因可能导致ABORT信号?

无法在Docker容器中捕获SIGINT

我有以下图像 FROM golang:1.8.3 WORKDIR /go/src/x/x/program RUN mkdir /logs VOLUME ["/go/src/x/x/program", "/logs"] CMD ["sh", "-c", "go install && program"] 我的Go服务器以下面的方式监听SIGINT // … Other stuff c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { <-c signal.Stop(c) // Server graceful shutdown err := s.Shutdown(context.Background()) if err != nil { fileLogger.Printf("could not shutdown server: %v", err) } else […]

基于Docker的环境configuration中的mod_wsgi

我需要设置:closuresWSGIRestrictSignal,因为我必须在调用正常关机后在我的python代码中执行一些操作。 从文档: 运行良好的Python WSGI应用程序通常不应该使用signal.signal()来注册任何自己的信号处理程序。 这样做的原因是,托pipeWSGI应用程序的Web服务器将更有可能注册自己的信号处理程序。 如果WSGI应用程序要覆盖这样的信号处理程序,它可能会干扰Web服务器的操作,从而阻止诸如服务器closures和重新启动等操作。 你知道如何在Docker中更改configuration文件吗? 我应该覆盖现有的文件吗? 这是我的Dockerfile: FROM grahamdumpleton/mod-wsgi-docker:python-2.7 ADD requirements.txt requirements.txt RUN ["pip", "install", "-r", "requirements.txt"] WORKDIR /app COPY src/main/scripts/app.wsgi /app/app.wsgi ENTRYPOINT [ "mod_wsgi-docker-start" ] CMD [ "app.wsgi", "–processes", "1", "–port", "5000" ] 我应该放这样的东西吗? ADD "httpd.conf" /tmp/mod_wsgi-localhost:5000:0/httpd.conf 至于我得到了mod_wsgi-docker-start“通过select”默认“configuration来执行所有的事情。 由于WSGIRestrictSignal设置为On“Default”,因此如果引发信号就不可能捕获: Server URL : http://localhost:5000/ Server Root : /tmp/mod_wsgi-localhost:5000:0 Server Conf : /tmp/mod_wsgi-localhost:5000:0/httpd.conf Error […]

当python应用程序发送SIGTERM时,容器崩溃

我正在运行一个Docker容器,它有一个生成其他进程的python应用程序。 我正在使用信号试图正常closurespython应用程序和所有的衍生进程。 当我使用来自如何正确处理SIGTERM信号的模板发送SIGTERM ? 整个集装箱终止。 如果我删除了pipe理派生进程的逻辑,那么应用程序正常closures,容器仍在运行(但其他进程仍在运行)。 我也尝试了其他信号,但结果是一样的。 Entering loop to listen for sigterm ^CLeaving loop Killing 188 devices /bin/sh: line 1: 31 Killed /bin/bash

无法捕获来自“docker停止”的TERM信号

这是我在CMD中使用的bash脚本 #!/bin/bash set -eo pipefail echo "Setting trap" echo $$ echo $BASHPID trap 'cleanup' TERM trap 'cleanup' KILL cleanup() { echo "Cleaning up…" kill -TERM `jobs -p` } # To start the essential services service ntp start service awslogs start cd /app python -m job_manager & wait Docker文件不是很有趣 FROM ubuntu:16.04 RUN apt-get update –fix-missing && […]

执行`kubectl rolling-update`时pod会收到什么进程信号?

kebernetes在Google容器引擎上进行滚动更新时,我正在使用go lang进行优雅的closuresfunction。 有没有人知道当kubectl滚动更新开始时什么过程信号发送到运行的豆荚? 我听过os.Kill,os.Interrupt,syscall.SIGTERM,syscall.SIGKILL,syscall.SIGSTOP信号来处理,没有这些信号是在kubectl滚动更新时产生的。 我会很感激你的答案。

在Docker中提供的Django应用程序中注册SIGINT / SIGQUIT信号

我有一个Django应用程序,它有一个需要完成的队列系统(构build来自各种开发人员的一些版本)。 然而,在一天结束的时候,我需要closures它,但是运行的版本不应该被终止。 为了实现这一点,我想我可以捕获终止信号(如SIGINT / SIGQUIT / SIGTERM),以便应用程序可以等待释放完成,然后closures系统。 我有以下信号注册系统: import time, sys, signal def signal_handler(signum, frame): print('Waiting for the releases to complete') time.sleep(5) print('TERMINATING GRACEFULLY…') sys.exit(0) for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT]: signal.signal(sig, signal_handler) 当我使用这段代码从命令行运行django的开发服务器时,它会注册信号并触发处理函数。 问题是我的应用程序在nginx和uWSGI的Docker上运行。 当我运行容器时,它注册了信号,但是当我停止docker容器时,SIGINT / SIGQUIT信号被uWSGI捕获,而不是由python捕获,我的信号处理程序没有被触发。 我相对较新的Docker和uWSGI,我无法找出一种方式发送这个信号直接到Python。 我应该怎么做python来捕捉信号,而不是uWSGI? 任何帮助,将不胜感激。 编辑:这是我的入口点脚本。 entrypoint.sh #!/bin/sh # Start uWSGI using the configuration file exec uwsgi –ini ./docker/django/uwsgi.ini […]

优雅地停止Docker容器

我有一些麻烦了解如何我可以做一些清理当容器停止。 为了更容易,我准备了一个样本来重现问题。 这里是我的文件的内容: Dockerfile FROM opensuse:latest # Install tcsh (non-interactive mode) RUN zypper -n in tcsh # Create user RUN useradd -ms /bin/tcsh dummyuser # Set the user USER dummyuser # Change Working Dir WORKDIR /home/dummyuser # Copy entrypoint script COPY docker-entrypoint.sh $HOME # Starter Script ENTRYPOINT ["./docker-entrypoint.sh"] docker-entrypoint.sh #!/bin/tcsh echo "Starting" onintr cleanup # […]

不能使用SIGKILL杀死Docker容器中的pid 1

出于某种原因,我想杀死docker集装箱中的主要Python进程(PID 1)。 但是SIGTERM , SIGKILL等terminal信号不工作。 我的意思是,跑kill -SIGKILL 1没有效果。 我怎样才能从容器内部杀死pid 1? 我不想运行docker stop或类似的解决scheme。