Tag: 监督

由非root用户启动pipe理员

在使用非root用户启动supervisord时遇到问题。 我有一个新的debian jessie系统(docker image)。 我安装了supervisord apt-get install supervisor 我创build一个新用户useradd lily 切换到那个用户 启动supervisord supervisord -n 在这一步我得到一个错误/var/log/supervisor/supervisor.log (Persimission error) 我可以chmod这个日志文件,所以百合将有权访问,但我做到了( chmod 777 -R /var/log/supervisor/ )并运行supervisord supervisord -n与莉莉的用户我得到这个错误: Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13) 我很困难,试图解决它。 我在openshift环境中进行部署,所以我将拥有root权限来设置环境,但启动supervisord时,我将不具有root权限。 在我的情况下,它必须由普通用户启动。

将服务添加到正在运行的容器中正在运行的supervisord

我明白,为了pipe理一个容器内的多个服务,我需要使用supervisord。 我的问题是如何在容器已经运行后添加服务? 我有一个容器,它已经在运行之后创build的服务,所以我需要稍后添加它。 目前我正在尝试做用户“服务秒重启”(秒是我的服务),它是失败的,因为docker不会允许它 非常感谢

Supervisorctl只能在docker的根目录下运行

我启动了一个Debian docker容器,安装了supervisosrd并启动了它。 /usr/bin/supervisord -c /etc/supervisord.conf 当连接到容器并通过superctctl检查状态时,我发现superctctl只能在/上运行。 以下是错误消息。 root@abcdd:~# docker exec -it 1a52 bash root@1a52e1e42a0d:/# supervisorctl mongodb RUNNING pid 14, uptime 0:48:50 supervisor> root@1a52e1e42a0d:/# cd /opt/ root@1a52e1e42a0d:/opt# supervisorctl unix:///var/run/supervisor.sock no such file 这是我的supervisord.conf。 [unix_http_server] file=/tmp/supervisor.sock [supervisord] nodaemon=true logfile=/tmp/supervisord.log pidfile=/tmp/supervisord.pid logfile_maxbytes=5MB logfile_backups=10 loglevel=info minfds=1024 minprocs=200 [supervisorctl] serverurl=unix:///tmp/supervisor.sock [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [program:mongodb] command = /monstor/bin/startup.sh directory = […]

supervisord禁用日志文件或使用logfile = / dev / stdout

[supervisord] nodaemon=true logfile=/dev/stdout pidfile=/var/run/supervisord.pid childlogdir=/var/log/supervisor 当我这样做时,主pipe将因为无法在/ dev / stdout中查找而崩溃 我如何禁用supervisord在我的docker容器中创build任何日志文件?

如何用supervisord监视nginx和cron?

我试图自动部署一个web应用程序,更新应用程序需要closurescron和nginx。 问题是,当我通过service nginx stop和service cron stop停止进程时,这些由supervisord重新启动。 supervisord没有init.d脚本,另外我不确定是否要用supervisorctl来pipe理服务。 什么是正确的方法?

Docker + supervisord:如何初始化服务(mongo&elasticmq)?

我正在使用docker和supervisord来创buildtesting环境,使用我们使用的一些服务,正如docker doc中的build议。 服务的基本configuration正在运行,我可以/ bin / bash容器,并从我的应用程序使用它没有问题(有一些手工初始化) 现在我需要添加一些对象到mongo:基本数据来testing应用程序。 有没有推荐的方法来做到这一点? 使用bash脚本我会做: … # Launch Mongodb /usr/bin/mongod & sleep 3; mongo –eval "db.getSiblingDB('MyDDBB').User.save( {…} )"; … 但是那个bash是我想要摆脱的。 elasticmq的使用是完全相同的:我需要运行一些创build一些队列,当容器开始运行,所以可能一个解决scheme适合两者。 我接受不同的解决scheme(改变主pipe?)

退出所有supervisord进程

我有一个docker图像,我希望: – 运行乘客服务器和另一个守护程序来监视乘客服务器。 – 只要这两个过程中的任何一个退出,容器即退出一次。 – 将所有日志指向标准输出 在configuration文件中,我把一个事件监听器(参考: https : //serverfault.com/questions/760726/how-to-exit-all-supervisor-processes-if-one-exited-with-0-result/762406 #762406 )捕获passenger_monit程序的一些事件并执行脚本tt.sh. 我可以看到一个额外的passenger_monit程序实例正在产生,并在几次尝试后达到致命状态。 其他passenger_monit和passenger_server都很好。 其他passenger_monit的事件不会传达给eventlistener。 这些是不按预期工作的脚本: 这是supervisord.conf [supervisord] nodaemon=true stdout_logfile=/dev/fd/1 redirect_stderr=true stdout_logfile_maxbytes=0 [unix_http_server] file=%(here)s/supervisor.sock [supervisorctl] serverurl=unix://%(here)s/supervisor.sock [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [program:passenger_monit] command=./script/passenger_monit.sh process_name=passenger_monit startretries=999 redirect_stderr=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 autorestart=true killasgroup=true stopasgroup=true numprocs=1 [program:passenger_server] command=passenger start startretries=999 redirect_stderr=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 autorestart=true killasgroup=true stopasgroup=true numprocs=1 [eventlistener:passenger_monit_exit] command=./tt.sh […]

supervisord如何在Docker容器内停止进程(陷阱终止信号)

当您向docker集装箱发送停止或终止命令(带有某些特定信号,例如HUP,TERM等)时,supervisord如何拦截该信号并将其发送给其子stream程? 如何在使用supervisord时优雅地阻止容器内的进程? 有两个属性可以在[program:x]部分中指定: stopwaitsecs和stopwaitsecs 。 但似乎没有办法指定一个自定义的关机/停止脚本(例如,tomcat_shuytdwon.sh或类似的东西)。 一些程序使用自定义关机过程来优雅地停止。

Docker:用于开发和生产环境的不同的ENVvariables

我有我在Amazon ECS上部署的Docker容器。 Docker容器运行supervisord,然后运行3个不同的程序。 当然,我想使用不同的环境variables来进行本地开发和生产,以区分API密钥,API端点等等。 什么是这样做的好方法? 这是我应该在Dockerfile,Amazon ECS或supervisord conf文件中设置的东西吗?

在pipe理员subprocess中运行docker run中传递的环境variables

我使用以下命令运行docker容器: docker run -it -e CustomEnvVariable="val123" -p 80:80 imagename 该图像具有运行与我的应用程序的以下conf文件的主pipe: [program:myapp] command=/usr/bin/dotnet /root/myapp/myapp.dll directory=/root/myapp/ autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log environment=ASPNETCORE__ENVIRONMENT=Production stopsignal=INT user=root 主pipe启动后如何从myapp中访问CustomEnvVariable ? 我在conf文件environment值中尝试了以下值: environment=ASPNETCORE__ENVIRONMENT=Production,CustomEnvVariable=%(ENV_CustomEnvVariable)s 但重启主pipe时我会收到这个错误: Restarting supervisor: Error: Format string 'ASPNETCORE__ENVIRONMENT=Production,CustomEnvVariable="%(ENV_CustomEnvVariable)s"' for 'environment' contains names which cannot be expanded 一些更多的信息: 使用pipe理员版本:3.0(通过apt-get install supervisor -y )。 我确认了CustomEnvVariable的值是通过检查echo $CustomEnvVariable的输出到达容器。 我做了一个快速扫描应用程序可用的所有环境variables,这里是结果: { "LC_ADDRESS": "", "SUPERVISOR_PROCESS_NAME": "myapp", "LC_MONETARY": […]