Python后端部署-Part3
Python后端部署-Part3——Supervisor进程管理
[TOC]
nohup
用途:不挂断地运行命令。
语法:
nohup Command [ Arg … ] [ & ]
- Command:要执行的命令。
- Arg:一些参数,可以指定输出文件。
- &:让命令在后台执行,终端退出后命令仍旧执行。
启动进程:
nohup python3 /data/WebService/backend/manage.py runserver 0.0.0.0:8000 >>/data/WebService/backend/log/output.log 2>&1 &
1
2
3
4
5
6
7
8
9
10
11
12
- 2>&1:将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
- 0 – stdin(standard input,标准输入)
- 1 – stdout(standard output,标准输出)
- 2 – stderr(standard error,标准错误输出)
- 终止进程:
- ```bash
ps -aux | grep manage.py
ps -aux | grep manage.py | grep -v grep | awk '{print $2}'参数说明:
- a : 显示所有程序
- u : 以用户为主的格式来显示
- x : 显示所有程序,不区分终端机
```bash
kill -9 进程号PID1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## Supervisor
### 简介
- Supervisor 是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。
- 它是通过 fork/exec 的方式把这些被管理的进程当作 supervisor 的子进程来启动,这样只要在 supervisor 的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。
- Supervisor 还提供了一个功能,可以为 supervisord 或者每个子进程,设置一个非 root 的 user,这个 user 就可以管理它对应的进程。
### 安装
1. 配置好 yum 源后,可以直接安装
```bash
yum install supervisor
默认配置文件
- 默认配置文件:
/etc/supervisor/supervisord.conf
(可能会在不同的地方) - 默认配置文件一般不需要改动,直接定义自己的配置文件即可
1 | [unix_http_server] |
自定义子进程配置文件(常用)
- 自定义的子进程配置文件路径:
/etc/supervisor/conf.d/
1 | # 项目名 |
注意:supervisor 不能监控后台进程,因此 command 不能为后台运行命令
启动服务
supervisord 直接启动
1 | supervisord -c /etc/supervisor/supervisord.conf |
systemctl 命令启动
- 编辑配置文件
1 | vim /usr/lib/systemd/system/supervisord.service |
1 | [Unit] |
- 常用命令
1 | systemctl stop supervisord |
常用命令(常用)
supervisorctl status all
:查看所有进程的状态supervisorctl stop [program]
:停止 program- program 换成 all 可以管理配置中的所有进程
supervisorctl start [program]
:启动 programsupervisorctl restart [program]
:重启 programsupervisorctl update
:配置文件修改后可以使用该命令加载新的配置$ cp /data/WebService/backend/supervisor.conf /etc/supervisor/conf.d/supervisor.conf $ supervisorctl update WebService: added process group # 其实这个时候已经开始运行后台了
### 常见问题1
2
3
4
5
6
6. `supervisorctl reload`:重新启动 supervisor
- ```bash
$ supervisorctl reload
Restarted supervisord
unix:///var/run/supervisor/supervisor.sock no such file
- 没有开启服务。
supervisord -c /etc/supervisor/supervisord.conf
- 没有开启服务。
启动了多个 supervisord 服务,导致无法正常关闭服务
- 使用
ps -fe | grep supervisord
查看所有启动过的 supervisord 服务,kill 相关的进程kill -9 进程号
。
- 使用
启动 uwsgi 时要注释 uwsgi 里的如下配置,否则 supervisorctl 启动时会报错
; daemonize = /home/apps/logManage/logs/uwsgi.log ; pidfile = /home/apps/logManage/conf/uwsgi.pid ; 可以增加 logto配置 logto = /home/apps/logManage/logs/uwsgi.log
bind(): Address already in use [core/socket.c line 769]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 浅幽丶奈芙莲的个人博客!