停止supervisord:关闭

Posted

技术标签:

【中文标题】停止supervisord:关闭【英文标题】:Stopping supervisord: Shut down 【发布时间】:2013-01-06 22:37:47 【问题描述】:

我厌倦了启动主管但出现错误。任何人都可以帮忙吗?谢谢

/etc/init.d/supervisord 文件。

SUPERVISORD=/usr/local/bin/supervisord
SUPERVISORCTL=/usr/local/bin/supervisorctl
case $1 in
start)
        echo -n "Starting supervisord: "
        $SUPERVISORD
        echo
        ;;
stop)
        echo -n "Stopping supervisord: "
        $SUPERVISORCTL shutdown
        echo
        ;;
restart)
        echo -n "Stopping supervisord: "
        $SUPERVISORCTL shutdown
        echo
        echo -n "Starting supervisord: "
        $SUPERVISORD
        echo
        ;;
esac

然后运行这些

sudo chmod +x /etc/init.d/supervisord
sudo update-rc.d supervisord defaults
sudo /etc/init.d/supervisord start

得到这个:

Stopping supervisord: Shut down

Starting supervisord: /usr/local/lib/python2.7/dist-packages/supervisor/options.py:286: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.
For help, use /usr/local/bin/supervisord -h

配置文件(位于/etc/supervisord.conf):

[unix_http_server]
file=/tmp/supervisor.sock; (the path to the socket file)

[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock; use a unix:// URL  for a unix socket

[program:myproject]
command=/home/richard/envs/myproject_stage/bin/python /home/richard/webapps/myproject/manage.py run_gunicorn -b 127.0.0.1:8002 --log-file=/tmp/myproject_stage_gunicorn.log
directory=/home/richard/webapps/myproject/
user=www-data
autostart=true
autorestart=true
stdout_logfile=/tmp/myproject_stage_supervisord.log
redirect_stderr=true

【问题讨论】:

您是否 100% 确定周围没有其他 supervisord.conf 文件?正如警告所述,它也会查看当前目录,以及本地(相对于当前目录)etc/ 路径,以及相对于 supervisord 可执行文件。使用-c 确定使用的是什么配置文件。 @MartijnPieters 我用sudo find / -iname 'supervisord.conf' 搜索文件,只找到了这个/etc/supervisord.conf 好,这个选项被取消了;您仍然真的想使用-c 来防止本地supervisord.conf 被拾取。您的supervisord 配置在手动启动时是否有效? 出了什么问题?如果您认为它可以帮助未来的访问者,也许您可​​以在下面添加一个答案? 哦,还有ready-made init scripts 可供supervisord 使用,让您省去自己编写的麻烦。 【参考方案1】:

首先,在你的控制台或终端上输入这个

ps -ef | grep supervisord

你会得到一些supervisord的pid,就像这些

root 2641 12938 0 04:52 pts/1 00:00:00 grep --color=auto supervisord

根 29646 1 0 04:45 ? 00:00:00 /usr/bin/python /usr/local/bin/supervisord

如果你得到这样的输出,你的 pid 就是第二个。那么如果你想关闭你的主管,你可以这样做

kill -s SIGTERM 29646

希望对您有所帮助。参考:http://supervisord.org/running.html#signals

【讨论】:

【参考方案2】:
sudo unlink /tmp/supervisor.sock

这个 .sock 文件在 /etc/supervisord.conf 的 [unix_http_server] 的文件配置值(默认为 /tmp/supervisor.sock)中定义。

【讨论】:

unlink: cannot unlink '/tmp/supervisor.sock': No such file or directory find / -name supervisor.sock 它也可能坐在这里。 ./var/run/supervisor.sock @Richard 从你的 supervisord.conf 文件,它应该在 /tmp/supervisor.sock 这并没有解决问题,我们必须取消链接才能停止主管。 知道根本原因是什么吗?我最近才在从运行 chef-client 重新启动 supervisord 时开始注意到这一点。当然,移除这个套接字可能会让 supervisord 重新启动,但为什么一开始就保留它呢?【参考方案3】:
$ ps aux | grep supervisor
alexamil         54253   0.0  0.0  2506960   6440   ??  Ss   10:09PM   0:00.26 /usr/bin/python /usr/local/bin/supervisord -c supervisord.conf

所以我们可以使用:

$ pkill -f supervisord  # kill it

【讨论】:

得知杀魔应该是万不得已,建议考虑改用sudo systemctl stop supervisor【参考方案4】:

尝试运行这些命令

sudo unlink /run/supervisor.sock

sudo /etc/init.d/supervisor start

【讨论】:

【参考方案5】:

这对我有用。在终端中运行以下命令(适用于 Linux 机器)

检查进程是否正在运行:

sudo systemctl status supervisor

停止进程:

sudo systemctl stop supervisor

【讨论】:

【参考方案6】:

3.0a11 版本开始,您可以这样做:

sudo kill -s SIGTERM $(sudo supervisorctl pid) 跳到 supervisorctl pid 函数的后面。

【讨论】:

我在 centos7 上。 supervisorctl pid 返回 pid,但 $(supervisorctl pid) 显示 command not found 您是否尝试过类似`supervisorctl pid` 的方法? $() 只是在同一命令行中返回另一个命令的输出的一种方式。我不确定 Centos7 是否会有这个,但如果没有,我会摸不着头脑。在任何情况下,如果您不能执行我上面的单行操作,只需将其分成两个命令即可。【参考方案7】:

        已经有很多答案可用。我将提出一种更简洁的方式来关闭 supervisord。

        supervisord 默认情况下,会在 supervisord.conf 文件所在的目录中创建一个名为 supervisord.pid 的文件。该文件包含 supervisord 守护进程的 pid。从文件中读取 pid 并终止 supervisord 进程。

        但是,您可以配置应在何处创建 supervisord.pid 文件。请参考此链接进行配置,http://supervisord.org/configuration.html

【讨论】:

以上是关于停止supervisord:关闭的主要内容,如果未能解决你的问题,请参考以下文章

supervisor 安装配置及使用

supervisor 安装配置及使用

supervisor管理进程 superlance对进程状态报警

Centos7 中使用Supervisor守护进程

CentOS 7.4 配置 Supervisor 守护进程

supervisord 停止子进程