0%

supervisor

由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。为了解决这种混乱,Unicode的编码方式被建立。Unicode是一种超级编码包含了所有这些编码的字符集,因此一些新的文本格式像XML的默认编码方式就是Unicode。

一、基础

      supervisor是一个客户/服务器系统,它可以在类Unix系统中管理控制大量进程。它使用python开发,有多年历史,目前很多生产环境下的服务器都在使用supervisor。

      supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件。可以在一个配置文件中配置相关参数,包括supervisord自身的状态,其管理的各个子进程的相关属性。

      supervisor的客户端称为supervisorctl,它提供了一个类shell的接口来使用supervisord服务端提供的功能。通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。客户端通过Unix域套接字或者TCP套接字与服务端进行通信,服务器端具有身份凭证认证机制,可以有效提升安全性。当客户端和服务器位于同一台机器上时,客户端与服务器共用同一个配置文s件/etc/supervisord.conf,通过不同标签来区分两者的配置。

      另外,supervisor也提供了一个web页面来查看和管理进程状态。

常用命令:

  1. supervisorctl status
  2. supervisorctl start laravel-queue-worker #启动laravel-queue-worker
  3. supervisorctl stop laravel-queue-worker #停止laravel-queue-worker
  4. supervisorctl restart laravel-queue-worker # 重启laravel-queue-worker
  5. supervisorctl update # 配置文件修改后可以使用该命令加载新的配置
  6. supervisorctl reload # 重新启动配置中的所有程序
  7. supervisorctl -u user -p 123 status

二、使用(Mac)

  1. 使用brew安装:brew install supervisor
    • 默认配置文件:/usr/local/etc/supervisord.conf
  2. 查看安装是否成功:echo_supervisord_conf
  3. 切换到配置目录:cd /usr/local/etc/
  4. tail supervisord.conf,可看到:files = /usr/local/etc/supervisor.d/*.ini
  5. 创建文件夹:mkdir supervisor.d,可以放多个配置
  6. 编辑supervisord.conf文件,打开[inet_http_server]的注释(即删掉前面的分号)
1
2
3
4
[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
username=user ; default is no username (open server)
password=123 ; default is no password (open server)
  1. cd supervisor.d
  2. vim laravel.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[program:laravel-queue-worker] ;唯一标识,不能重复 

process_name=%(program_name)s_%(process_num)02d ;指定进程的命名规则:foo_00,foo_01...

command=php /your_path/artisan queue:work --sleep=3 --tries=3 ;必填参数,程序启动后执行的命令(绝对/相对),受控的程序本身不应该是守护程序

autostart=true ;Supervisor启动时自动启动该程序

autorestart=true ;指定进程挂掉时supervisor自动重启进程

user=wangkaikai ;指定运行进程使用的用户,需要Supervisor以root用户运行。使用setuid切换用户,不会启动shell程序和改变环境变量

numprocs=8 ;运行和监控的进程数量,进程位于laravel-worker组内,指定该值需同时设置process_name包含%(process_num)s

redirect_stderr=true ;将标准错误输出stderr重定向到stdout标准输出

stdout_logfile=/your_path/queue-worker.log ;将进程的stdout标准输出写入文件中,设为NONE不会创建任何日志文件。
  1. ps -ef|grep supervisord

  2. 常见错误

    • unix:///usr/local/var/run/supervisor.sock no such file
    • supervisor: couldn’t setuid to 0: Can’t drop privilege as nonroot user

      三、参考

  3. 参考一