使用supervisor管理你的程序

862 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

WangScaler: 一个用心创作的作者。

声明:才疏学浅,如有错误,恳请指正。

Supervisor是python开发的一种进程管理工具。不仅可以监控我们的程序还可以自动重启我们的程序,非常好用。我们的python程序、springboot程序都可以交给Supervisor来管理,那么接下来一块看看supervisor是如何安装使用的吧!

1、安装

yum install supervisor

简简单单的就用yum安装上我们的supervisor。

2、修改配置文件

  • 启动web界面并配置密码

    [inet_http_server]         ; inet (TCP) server disabled by default
    port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)
    username=WangScaler              ; (default is no username (open server))
    password=WangScaler@juejin.com        ; (default is no password (open server))
    

    切记,如果开在公网一定配置上用户名和密码,安全第一。

  • 给命令加密

    [supervisorctl]
    serverurl=unix:///run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
    ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
    username=WangScaler              ; should be same as http_username if set
    password=123                ; should be same as http_password if set
    ;prompt=WangScaler@juejin.com          ; cmd line prompt (default "supervisor")
    ;history_file=~/.sc_history  ; use readline history if available
    

    如果操作的用户是你自己或者是你信任的用户,其实完全没必要,每次使用命令都得输入密码,反而麻烦。怎么说呢都是为了安全。

  • 配置应用自启

    ;[program:theprogramname]
    ;command=/bin/cat              ; the program (relative uses PATH, can take args)
    ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
    ;numprocs=1                    ; number of processes copies to start (def 1)
    ;directory=/tmp                ; directory to cwd to before exec (def no cwd)
    ;umask=022                     ; umask for process (default None)
    ;priority=999                  ; the relative start priority (default 999)
    ;autostart=true                ; start at supervisord start (default: true)
    ;autorestart=true              ; retstart at unexpected quit (default: true)
    ;startsecs=10                  ; number of secs prog must stay running (def. 1)
    ;startretries=3                ; max # of serial start failures (default 3)
    ;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)
    ;stopsignal=QUIT               ; signal used to kill process (default TERM)
    ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
    ;user=chrism                   ; setuid to this UNIX account to run the program
    ;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
    ;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
    ;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
    ;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
    ;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
    ;stdout_events_enabled=false   ; emit events on stdout writes (default false)
    ;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
    ;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
    ;stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)
    ;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
    ;stderr_events_enabled=false   ; emit events on stderr writes (default false)
    ;environment=A=1,B=2           ; process environment additions (def no adds)
    ;serverurl=AUTO                ; override serverurl computation (childutils)
    

    可以在这里配置上启动程序的命令,比如command=python3 /usr/local/wangscaler.py,还可以通过其他的方法配置自启。接下来教你怎么使用配置文件,管理进程。

3、启动supervisor并配置自启

基本操作,没啥好说的。

systemctl restart supervisord
systemctl enable supervisord

4、使用配置文件管理python项目

  • 1、 首先在/etc/supervisor.d下创建文件wangscaler.ini

  • 2、编辑wangscaler.ini,示例如下:

    ;/etc/supervisord.d/wangscaler.ini[program:wangscaler]command     =sudo /root/.virtualenvs/grpc/bin/python3.6 /usr/local/wangscaler.py
    directory   = /usr/local/
    user        = root
    startsecs   = 3
    autostart   = trueredirect_stderr         = true
    stdout_logfile_maxbytes = 50MB
    stdout_logfile_backups  = 10
    stdout_logfile          = /usr/local/log/app.log
    

    内容和配置文件差不多,仿照着写即可。必须注意的是,如果上述的/usr/local/log/app.log文件不存在,那么你的项目是启动不起来的。如果是springboot项目,只需要将command =sudo /root/.virtualenvs/grpc/bin/python3.6 /usr/local/wangscaler.py修改为command =java -jar /usr/local/wangscaler.jar即可。

5、启动上述的程序

通过supervisorctl reload重新加载配置文件,切记不要使用supervisorctl update,因为这个命令会使所有的程序重启。导致你原先启动的程序,再次启动,从而影响你的业务。

6、修改了代码,重启

supervisorctl restart wangscaler

你的program的名字是啥你就写啥,我这里使wangscaler。

7、命令参考

supervisorctl status:查看所有进程的状态
supervisorctl stop myproject:停止myproject
supervisorctl start myproject:启动myproject
supervisorctl restart myproject: 重启myproject
supervisorctl update :配置文件修改后可以使用该命令加载新的配置
supervisorctl reload: 重新启动配置中的所有程序

来都来了,点个赞再走呗!

关注WangScaler,祝你升职、加薪、不提桶!