# aptitude install supervisor
The following NEW packages will be installed:
python-medusa{a} python-meld3{a} supervisor
0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/290 kB of archives. After unpacking 1,552 kB will be used.
Do you want to continue? [Y/n/?] Y
Selecting previously deselected package python-medusa.
(Reading database ... 35128 files and directories currently installed.)
Unpacking python-medusa (from .../python-medusa_0.5.4+clean-2ubuntu1_all.deb) ...
Selecting previously deselected package python-meld3.
Unpacking python-meld3 (from .../python-meld3_0.6.5-3build1_amd64.deb) ...
Selecting previously …Run Code Online (Sandbox Code Playgroud) 我有需要任意时间关闭的进程,在 2 秒到几分钟之间。重要的是此进程正常退出(未终止)。我使用 supervisord 和 ubuntu 服务器来运行它。
当服务器收到 ACPI 关闭信号(来自 VPS 提供商的重新启动命令,这就是我假设的 EC2)时,supervisord(和整个系统)是否会在关闭序列期间等待所有子进程退出?
我正在尝试使用http://supervisord.org/。但遇到错误。我supervisord.conf在运行它的同一目录中有该文件。
我supervisord第一次尝试在我的 OSX Lion 计算机上运行,当我运行它时出现错误:
Error: .ini file does not include supervisord section
我easy_install按照说明安装了它。在谷歌搜索中真的找不到任何有用的东西。帮助和指导将不胜感激。谢谢你。
我已经设置了主管来监控一些进程。因为我是通过远程脚本部署的,所以我需要一种无需 sudo 即可发送主管启动/停止命令的方法。我不知道如何做到这一点。
主管有没有办法以非 root 用户身份运行指定的命令?
supervisordFreeBSD 上是否有预先存在的启动脚本?如果没有,是否有为rc.dFreeBSD编写脚本的好指南?我对这个平台很陌生。
谢谢。
更新:
我现在在 中有以下内容/usr/local/etc/rc.d/supervisord,但它似乎不起作用。我在与 supervisord 相关的启动滚动中没有看到任何内容。
#!/bin/sh
# PROVIDE: supervisord
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name="supervisord"
rcvar=`set_rcvar`
load_rc_config "$name"
command="/usr/local/bin/${name}"
command_args="-c /usr/local/etc/supervisord.conf"
supervisord_enable=${supervisord_enable-"NO"}
supervisord_pidfile=${supervisord_pidfile-"/var/run/supervisord.pid"}
pidfile="${supervisord_pidfile}"
run_rc_command "$1"
Run Code Online (Sandbox Code Playgroud) 我正在使用supervisord 的 [program:x]来保持我的后台队列运行器正常运行。numprocs 的数量设置为静态数字,但现在我正在寻找一种解决方案,根据队列的工作负载动态调整进程计数。
是否可以(以编程方式)更改 supervisord 的 numprocs 设置的数量而不影响已经运行的工人?
我正在尝试在主管中运行 gunicorn_django 进程,但它总是立即退出,并出现此错误:
INFO exited: my_app (exit status 1; not expected)
INFO received SIGCLD indicating a child quit
INFO gave up: my_app entered FATAL state, too many start retries too quickly
Run Code Online (Sandbox Code Playgroud)
我的服务器脚本如下所示:
#!/bin/bash
set -e
LOGFILE=/var/log/gunicorn/my_app.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3
USER=my-www-user
GROUP=my-www-user
cd /home/my-www-user/my_app
source /home/my-www-user/.virtualenvs/my_app/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
gunicorn_django -w $NUM_WORKERS --debug \
--user=$USER --group=$GROUP \
--log-level=debug --log-file=$LOGFILE 2>>$LOGFILE\
--pythonpath=my_app --settings=settings.active \
my_app.wsgi:application
Run Code Online (Sandbox Code Playgroud)
我的主管配置如下所示:
[program:my_app]
directory=/home/my-www-user/my_app/
user=my-www-user
command=/home/my-www-user/my_app/server.sh
stdout_logfile=/var/log/supervisor/my_app.log
stderr_logfile=/var/log/supervisor/my_app-error.log
autostart=true
autorestart=true
Run Code Online (Sandbox Code Playgroud)
当我su进入my-www-user …
我想在 supervisord 进程更改状态时收到通知。我想我已经正确配置了它,但它不起作用:当我更改进程的状态(即启动/停止)时,我没有收到电子邮件,也没有看到故障信号。
这是主管配置:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m my_email@gmail.com
events=PROCESS_STATE
Run Code Online (Sandbox Code Playgroud)
主管状态告诉我 crashmail 正在运行:
crashmail RUNNING pid 54227, uptime 0:11:50
other RUNNING pid 54229, uptime 0:11:49
someother RUNNING pid 54267, uptime 0:10:59
Run Code Online (Sandbox Code Playgroud)
在 crashmail 的 stdout 日志中,我发现了类似的内容:
READY
RESULT 2
OKREADY
RESULT 2
OKREADY
READY
RESULT 2
OKREADY
READY
READY
Run Code Online (Sandbox Code Playgroud)
并且标准错误是空的。我试图启动/停止其他进程但没有任何结果。
在我看来,supervisord 没有向崩溃邮件发送事件......我该如何检查?
我必须运行同一应用程序的多个实例,但设置略有不同。唯一改变的是一个命令行参数。
所以目前我的脚本看起来像这样:
[program:thing-one]
command=/usr/local/thing --instance one
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
[program:thing-two]
command=/usr/local/thing --instance two
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
[program:thing-three]
command=/usr/local/thing --instance three
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
Run Code Online (Sandbox Code Playgroud)
如何避免重复相同的设置?
我正在运行 Supervisor 3.2.0-2ubuntu0.2 Ubuntu 16.04。我想更改我的一个进程使用的命令,但我需要确保主管向它发送正确的信号,以便进程可以结束;不幸的是,即使我已经请求了 TERM,主管仍然会发送 SIGKILL。
[program:my-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/worker/job --param=a,b,c
autostart=true
autorestart=true
stopwaitsecs=10
user=worker
stopsignal=TERM
numprocs=1
stdout_logfile=/var/log/supervisor/worker.log
stderr_logfile=/var/log/supervisor/worker-error.log
Run Code Online (Sandbox Code Playgroud)
如果我遵循Supervisor 在更改“命令”后未加载新的配置文件(例如:),php /home/worker/job --param=a,b,c,d我会在日志中看到以下内容:
2018-08-08 09:05:21,514 INFO waiting for worker_00 to stop
2018-08-08 09:05:21,533 INFO stopped: worker_00 (terminated by (9) SIGKILL)
Run Code Online (Sandbox Code Playgroud)
我特别需要确保发送 SIGTERM - 我已经深入研究了代码,但我没有看到任何明显的迹象表明我的配置不正确。我调用了错误的命令吗?service supervisord restart触发相同。