加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX 进程管理 1.supervisor安装

发布时间:2023-02-13 13:11:24 所属栏目:Unix 来源:
导读:  是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,su
  是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能UNIX 进程管理,不再需要自己写shell脚本来控制。
 
  1.supervisor安装
 
  pip install supervisor
  2.supervisor配置 2.1.初始化配置文件
 
  mkdir /etc/supervisor
  echo_supervisord_conf > /etc/supervisor/supervisord.conf
  2.2.修改配置文件
 
  配置文件supervisord.conf各字段解释可参考:
 
  [unix_http_server]
  ;修改file的路径
  file=/etc/supervisor/supervisor.sock   ; the path to the socket file
  ;chmod=0700                 ; socket file mode (default 0700)
  ;chown=nobody:nogroup       ; socket file uid:gid owner
  ;username=user              ; default is no username (open server)
  ;password=123               ; default is no password (open server)
  ......
  [supervisord]
  ;修改logfile的路径
  logfile=/etc/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
  logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
  logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
  loglevel=info                ; log level; default info; others: debug,warn,trace
  ;修改pidfile的路径
  pidfile=/etc/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
  ......
  [supervisorctl]
  ;修改serverurl
  serverurl=unix:///etc/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
  ......
  ;[include]
  ;files = relative/directory/*.ini
  ;下面是新增的
  [include]
  files = /etc/supervisor/config.d/
  2.3.配置进程管理文件
 
  上面的配置文件supervisord.conf是用来管理supervisord进程(父进程)的,而此处的进程管理文件是用来管理被supervisord守护的进程(子进程)的。
 
  mkdir /etc/supervisor/config.d
  cd /etc/supervisor/config.d
  vim one_name.conf
  one_name.conf可以自己取一个名字(后缀名不要改,如果要改,需要改2.2配置文件中的files的值),将以下内容拷贝到one_name.conf中
 
  ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
  [program:shse_server]
  command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
  ;numprocs=1                                    ; 默认为1
  ;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
  directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
  user=root                 ; 使用 root 用户来启动该进程
  ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
  autorestart=true
  redirect_stderr=true        ; 重定向输出的日志
  stdout_logfile = /var/log/supervisord/shse_server.log
  loglevel=info
  2.4.启动Supervisor服务
 
  # 由于2.3小节配置文件中日志文件存放路径是/var/log/supervisord,故需先创建
  mkdir /var/log/supervisord
  # 启动supervisor服务
  supervisord -c /etc/supervisor/supervisord.conf
  2.5.守护多个进程
 
  如果需要守护多个进程,则最简单的方式就是在2.3小节中的配置文件中定义多个program
 
  ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
  [program:zqs_server]
  command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
  ;numprocs=1                                    ; 默认为1
  ;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
  directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
  user=root                 ; 使用 root 用户来启动该进程
  ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
  autorestart=true
  redirect_stderr=true        ; 重定向输出的日志
  stdout_logfile = /var/log/supervisord/zqs_server.log
  loglevel=info
  ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
  [program:zqs2_server]
  command=nohup python3 -u zqs2.py >/dev/null &   ;启动被守护进程的命令
  ;numprocs=1                                    ; 默认为1
  ;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
  directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
  user=root                 ; 使用 root 用户来启动该进程
  ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
  autorestart=true
  redirect_stderr=true        ; 重定向输出的日志
  stdout_logfile = /var/log/supervisord/zqs2_server.log
  loglevel=info
  配置完成后,需要更新supervisord
 
  supervisorctl reload
  守护多个进程还可以通过group来完成
 
  [group:foo]
  programs=bar,baz
  priority=999
  示例如下
 
  [group:ttt]
  programs=zqs_server,zqs2_server
  ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
  [program:zqs_server]
  command=nohup python3 -u zqs.py >/dev/null &   ;启动被守护进程的命令
  ;numprocs=1                                    ; 默认为1
  ;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
  directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
  user=root                 ; 使用 root 用户来启动该进程
  ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
  autorestart=true
  redirect_stderr=true        ; 重定向输出的日志
  stdout_logfile = /var/log/supervisord/zqs_server.log
  loglevel=info
  ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
  [program:zqs2_server]
  command=nohup python3 -u zqs2.py >/dev/null &   ;启动被守护进程的命令
  ;numprocs=1                                    ; 默认为1
  ;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
  directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录
  user=root                 ; 使用 root 用户来启动该进程
  ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
  autorestart=true
  redirect_stderr=true        ; 重定向输出的日志
  stdout_logfile = /var/log/supervisord/zqs2_server.log
  loglevel=inf
  配置完成后,需要更新supervisord
 
  supervisorctl reload
  如果需要停止group中的进程
 
  # 停止group:ttt中的所有进程
  supervisorctl stop ttt:*
  # 停止group:ttt中的某个进程
  supervisorctl stop ttt:zqs_server
  PS:如果使用group来管理进程,则此时不能用以下命令停止某个进程
  supervisorctl stop program_name
  3.相关命令
 
  # 启动supervisor
  supervisord
  # 修改完配置文件后重新启动supervisor
  supervisorctl reload
  # 查看supervisor监管的进程状态
  supervisorctl status
  # 启动XXX进程
  supervisorctl start program_name
  # 停止XXX进程
  supervisorctl stop program_name
  # 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
  supervisorctl stop all
  # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
  supervisorctl update
  # 停止group中所有进程
  supervisorctl stop group_name:*
  # 停止group中某个进程
  supervisorctl stop group_name:program_name
  4.安装配置可能出现的错误
 
  Starting supervisor: Unlinking stale socket /etc/supervisor/supervisor.sock
 
  find / -name supervisor.sock
  unlink /***/supervisor.sock
  将查找到的sock文件都unlink
 
  5.supervisor开机自启动
 
  在目录/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置内容
 
  PS:如果没有该路径,则手动创建
 
  [Unit]
  Description=Process Monitoring and Control Daemon
  After=rc-local.service nss-user-lookup.target
  [Service]
  Type=forking
  ExecStart=supervisord -c /etc/supervisor/supervisord.conf ;开机启动时执行
  ExecStop=supervisord shutdown
  ExecReload=supervisord reload
  killMode=process
  Restart=on-failure
  RestartSec=42s
  [Install]
  WantedBy=multi-user.targe
  启动服务
 
  systemctl enable supervisord
  验证是否开机自启动
 
  systemctl is-enabled supervisord
  出现以下提示信息,则说明开机自启动已设置成功。

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章