标签: supervisord

为什么谷歌不推荐使用supervisord作为容器?在 kubernetes 中运行时,supervisord 能否很好地处理 PID 1 问题?

根据这篇文章,谷歌提到

您可能会在公共图像中看到以下操作,但不要遵循它们的示例:

  • 使用supervisord等进程管理系统来管理容器中的一个或多个应用程序。

我知道使用 Supervisord 管理一个容器中的多个应用程序有很多缺点。例如不适合自动缩放、难以进行健康检查等。但是它还有其他缺点吗?我想知道supervisord如何处理PID 1问题?

python linux supervisord docker kubernetes

1
推荐指数
1
解决办法
1881
查看次数

在 docker 上运行supervisord时出现错误消息“Crit uncaptured python exception”

我正在 docker 容器上尝试 Supervisord 来尝试控制容器内的两个进程。目前,进程 1 每 10 秒键入一次“我是进程 1”,进程 2 每隔 10 秒键入一次“我是进程 2”。它们都是非常简单的 bash 脚本。

在 docker 日志中我遇到这个错误:

2022-04-04T15:40:56.770705073Z I am process 1
2022-04-04T15:40:56.770775532Z 2022-04-04 15:40:56,770 CRIT uncaptured python exception, closing channel <POutputDispatcher at 140473979288352 for <Subprocess at 140473979288304 with name PROGRAM1 in state RUNNING> (stdout)> (<class 'OSError'>:[Errno 29] Illegal seek [/usr/lib/python3/dist-packages/supervisor/supervisord.py|runforever|218] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|handle_read_event|281] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|record_output|215] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|_log|184] [/usr/lib/python3/dist-packages/supervisor/loggers.py|info|327] [/usr/lib/python3/dist-packages/supervisor/loggers.py|log|345] [/usr/lib/python3/dist-packages/supervisor/loggers.py|emit|227] [/usr/lib/python3/dist-packages/supervisor/loggers.py|doRollover|264])
2022-04-04T15:41:06.761850899Z I am process 2
2022-04-04T15:41:06.761913329Z 2022-04-04 15:41:06,761 CRIT uncaptured python exception, closing channel <POutputDispatcher at 140473979378128 for <Subprocess …
Run Code Online (Sandbox Code Playgroud)

supervisord docker

1
推荐指数
1
解决办法
1317
查看次数

在xmlrpc上与supervisord交谈

我正在尝试与supervisorxmlrpc 交谈.基于supervisorctl(尤其是这一行),我有以下内容,它似乎应该工作,并且确实它可以工作,只要它足够连接以从服务器接收错误:

#socketpath is the full path to the socket, which exists
# None and None are the default username and password in the supervisorctl options
In [12]: proxy = xmlrpclib.ServerProxy('http://127.0.0.1', transport=supervisor.xmlrpc.SupervisorTransport(None, None, serverurl='unix://'+socketpath))

In [13]: proxy.supervisor.getState()
Run Code Online (Sandbox Code Playgroud)

导致此错误:

---------------------------------------------------------------------------
ProtocolError                             Traceback (most recent call last)
/home/marcintustin/webapps/django/oneclickcosvirt/oneclickcos/<ipython-input-13-646258924bc2> in <module>()
----> 1 proxy.supervisor.getState()

/usr/local/lib/python2.7/xmlrpclib.pyc in __call__(self, *args)
   1222         return _Method(self.__send, "%s.%s" % (self.__name, name))
   1223     def __call__(self, *args):
-> 1224         return self.__send(self.__name, args)
   1225
   1226 ## …
Run Code Online (Sandbox Code Playgroud)

python xml-rpc xmlrpclib supervisord

0
推荐指数
1
解决办法
4901
查看次数

在子进程日志记录中使用supervisord生成的进程名称

我想在子进程日志中使用子进程的名称(如"mysuperservice_1","mysuperservice_2"等等).使用python构建的服务.

我该怎么做?TIA!=)

EDIT1

我的supervisord配置看起来像:

[program:superservice]
command = python manage.py superservice
process_name=%(program_name)s_%(process_num)s
autostart=true
autorestart=true
numprocs=4
stdout_logfile=spool/logs/superservice.log
stderr_logfile=spool/logs/superservice.error.log
Run Code Online (Sandbox Code Playgroud)

它将产生这样的过程:

dizpers   4912  0.3  0.5 170472 21976 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4913  0.3  0.5 170476 22520 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4920  0.2  0.5 170476 22524 ?        Sl   22:09   0:00 python manage.py superservice
dizpers   4926  0.3  0.5 170476 22432 ?        Sl   22:09   0:00 python manage.py superservice
Run Code Online (Sandbox Code Playgroud)

所以,我不能只是简单地获取进程名称(例如,通过psutil模块).我需要通过supervisord以某种方式获得它.

python logging supervisord

0
推荐指数
1
解决办法
1180
查看次数

Django celery 守护进程给出“supervisor FATAL 找不到命令”,但路径是正确的

概述:

我正在尝试将 celery 作为守护进程运行来执行发送电子邮件的任务。它在开发中运行良好,但在生产中却运行不佳。我现在有了我的网站,每个功能都工作正常(没有 django 错误),但由于守护进程未正确设置,任务无法完成,并且我在 ubuntu 16.04 中收到此错误:

project_celery FATAL can't find command '/home/my_user/myvenv/bin/celery'

安装的程序/硬件,以及我到目前为止所做的事情:

我在 VPS 上使用 Django 2.0.5、python 3.5、ubuntu 16.04、rabbitmq 和 celery。我使用 venv 来完成这一切。我也安装了主管,当我检查时它正在运行sudo service --status-all,因为它旁边有一个+。Erlang 也已安装,当我检查时top,rabbitmq 正在运行。使用sudo service rabbitmq-server status表明rabbitmq也处于活动状态。

最初,我按照celery 网站上的说明进行操作,但它们非常令人困惑,并且在测试/阅读/观看其他人的解决方案约 40 小时后我无法让它工作。感到非常恼怒和挫败,我选择了这里的方向来设置守护进程并希望我能到达某个地方,并且我已经走得更远,但我收到了上面的错误。

我通读了主管文档,检查了进程状态以尝试调试问题以及程序设置,但我迷失了,因为根据文档,据我所知,我的路径是正确的。

这是我的文件结构:

home/
    my_user/               # is a superuser
        portfolio-project/
            project/
                __init__.py
                celery.py
                settings.py     # this file is in here too
            app_1/
            app_2/
            ...
            ...
        logs/
            celery.log
        myvenv/
            bin/
                celery …
Run Code Online (Sandbox Code Playgroud)

django ubuntu rabbitmq celery supervisord

0
推荐指数
1
解决办法
2366
查看次数

如何安装/卸载 Laravel Supervisor (supervisorctl)?

我使用 Laravel homestead 进行开发,但我的 QA 服务器在 Amazon Linux 上。这是基于 CentOS-7 的。

我已经按照Laravel 文档中所说的方式在我的 Dev 上安装了 Supervisor

sudo apt-get install supervisor 
Run Code Online (Sandbox Code Playgroud)

现在我是堆栈。

它没有说明如何卸载它,也没有说明如何在 Amazon Linux 上安装它。

如何从 Homestead 卸载 Laravel Supervisor?以及如何在 Amazon Linux 上安装/卸载它?

amazon-ec2 supervisord laravel amazon-linux

0
推荐指数
1
解决办法
1万
查看次数

在 Laravel 5.7 升级后使用 configureMonologUsing - Supervisor Logging Permission

我正在尝试将我的 Laravel 5.5 项目升级到 5.7。我使用主管,在我configureMonologUsing()用来生成日志之前,但显然随着 5.6 升级,它贬值了。我在 L5.5 中的完整代码是:在 bootstrap/app.php 中:

$app->configureMonologUsing( function( Monolog\Logger $monolog) {
    $processUser = posix_getpwuid( posix_geteuid() );
    $processName= $processUser[ 'name' ];

    $filename = storage_path( 'logs/laravel-' . php_sapi_name() . '-' . $processName . '.log' );
    $handler = new Monolog\Handler\RotatingFileHandler( $filename );
    $monolog->pushHandler( $handler );
});
Run Code Online (Sandbox Code Playgroud)

它正在生成各种记录器,例如(这很方便):

  • laravel-cli-root-{date},

  • laravel-cli-ubuntu-{date},

  • laravel-cli-www-data-{date},

  • laravel-fpm-fcgi-www-data-{date} 等...

但是,它在升级指南中说,所以我不能再使用configureMonologUsing了:

configureMonologUsing方法

如果您使用 configureMonologUsing 方法为您的应用程序自定义 Monolog 实例,您现在应该创建一个自定义日志通道。有关如何创建自定义通道的更多信息,请查看完整的日志记录文档

我无法弄清楚如何使用日志记录通道实现相同的目标。如何利用 Monolog Channel 编写 laravel/storage/logs 文件夹?

php logging supervisord laravel laravel-5.7

0
推荐指数
1
解决办法
1908
查看次数

Ubuntu主管导入python模块错误

我使用主管在系统启动时运行 django websocket。

当我启动主管时,它会引发

ModuleNotFoundError:没有名为“django”的模块

在日志文件中。

这是主管conf:

[fcgi-program:myProject]
environment=HOME="/home/ubuntu/envFiles/myProject/bin"
# TCP socket used by Nginx backend upstream
socket=tcp://0.0.0.0:8000

directory=/home/ubuntu/projects/myProject

command=daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers myProject.asgi:application

# Number of processes to startup, roughly the number of CPUs you have
numprocs=4

process_name=asgi%(process_num)d

autostart=true
autorestart=true

stdout_logfile=/home/ubuntu/logs/project.log
redirect_stderr=true
Run Code Online (Sandbox Code Playgroud)

当我尝试通过 重新启动主管时supervisorctl restart all,它再次出现导入模块错误。

错误日志:

ModuleNotFoundError:没有名为“django”的模块

我认为它使用系统 python 路径但我environment在配置文件中定义,所以主管必须使用那里的环境。

有什么问题 ?

如何在主管 conf 中设置我的 django 环境文件?

python django ubuntu-server supervisord django-supervisor

0
推荐指数
1
解决办法
1608
查看次数

Laravel 调度程序由supervisord运行多次

我正在尝试将 Supervisord 与 Laravel 调度程序一起使用。它可以工作,但运行了多次,我不知道是否有任何配置错误。但我期望的是每个调度程序只有一次。如果我对这种情况有任何经验,请帮助我。

  1. 这是supervisord conf 文件。须藤纳米 /etc/supervisord.conf
[program:laravel-scheduler]
client_loop: send disconnect: Broken pipeum)02d
command=php /var/www/project-api/artisan schedule:run --verbose --no-interaction
[Process completed]autostart=true
autorestart=true
numprocs=1
user=nginx
redirect_stderr=true
stdout_logfile=/var/www/project-api/storage/logs/schedule.log
stdout_logfile_maxbytes=10MB
logfile_backups=10
Run Code Online (Sandbox Code Playgroud)
  1. 这是 laravel 控制台内核
protected function schedule(Schedule $schedule)
{
    $schedule->command('telescope:prune --hours=24')->daily();
    $schedule->command('horizon:snapshot')->everyFiveMinutes();
    $schedule->job(new HourlyJob(), QueueName::HOURLY_JOB)->hourly();
    $schedule->job(new MinuteJob(), QueueName::MINUTE_JOB)->everyTwoMinutes();
} 
Run Code Online (Sandbox Code Playgroud)
  1. 这是schedule.log 文件

在此输入图像描述

调度程序每两分钟正确运行一次,但问题是运行多个调度命令。请帮我解决这个问题。谢谢

php scheduler supervisord laravel

0
推荐指数
1
解决办法
7595
查看次数