我们在linux服务器上部署模型或者一个长期运行的程序的时候,通常使用的是nohup方法,因为nohup真的非常简单,只需要一行命令即可,但是nohup不好的地方就在于无法监控,并且无法自动中断重启,如果我们要查看一个nohup的程序是否在运行,需要每次输入ps -aux | grep "运城程序"才可以,比较繁琐,因此这里就推荐超好用的supervisor定时管理服务,并介绍一下他的核心用法,可以轻松上手
初次安装由于supervisor在服务器上已经安装好了,等下次有机会自己安装的时候再更新~
3步完成部署首先介绍一下supervisor的安装路径,通常会安装在/etc/下面,在/etc/supervisord.conf文件的最下面,我们可以看到supervisor的加载文件路径,这个路径是可以更改的
[include] files =/etc/supervisord.d/*.ini
知道加载文件的路径后,咱们就可以开始部署程序了
- 编写.ini文件,格式如下
[program:deploy] process_name=%(program_name)s command= /home/venv/bin/python /home/python/deploy_api.py directory= /home/python/ environment=PYTHONPATH=/home/ stdout_logfile=/home/logs/deploy.log stderr_logfile=/home/logs/deploy.log numprocs=1 numprocs_start=0 autostart=true autorestart=true
- program: deploy,这里的deploy决定了在supervisor中显示的名字,不同与其他重名
- command: 第一个命令为python所在目录,第二个命令为想要运行的程序(这是以python进行距离,如果是java等其他一样)
- directory: 项目目录,不一定非得是运行程序的上级
- enviroment: 在这里是python环境的上级,anaconda也是类似的
- stdout_logfile: 是输出的记录
- stderr_logfile: 是错误的记录
- numprocs: 运行的进程数
- numprocs_start: 开始进程的编号
- autostart: 是否自动启动
- autorestart: 是否自动重启
- 在写.ini文件保存后,我们可以直接在centos上运行supervisorctl update进行更新,在ubuntu上可能得加上sudo
- 然后我们在命令行上输入supervisorctl就可以看到咱们的程序名字出现了,如果显示RUNNING那就代表程序正常运行了
- ini文件中最好不要写中文注释,可能会导致ini文件无法运行
- 要使用对应环境的python去运行,ini文件必须写对,不然会出现spawn error
- sudo supervisorctl shutdown可以关闭supervisor
- 重启命令sudo supervisord -c /etc/supervisord.conf
- sudo supervisorctl reload重新加载所有supervisor定时命令,在多人合作时最好不要用
- 在supervisorctl命令行中,输入status刷新状态



