linux学习笔记 Ubuntu下的守护进程supervisor安装与多项目部署

我这里首先是在本地WSL上进行安装,WSL2的是ubuntu 24.04,之后又再正式环境的ubuntu 20.04上安装,再次记录一下。

1、首先安装supervisor

apt install -y supervisor

2、创建配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

3、修改配置文件

vim /etc/supervisor/supervisord.conf

我需要web的管理页面,所以找到下面的位置,将前面的分号去掉

没有改端口,还是使用9001,本机的WSL2我用的局域网ip,正式服务器上的ip我是用的是0.0.0.0,(因为有一些网络问题配置成IP,会报错Cannot open an HTTP server: socket.error reported errno.EADDRNOTAVAIL)。

然后我们设置允许防火墙通过9001。

sudo ufw allow 9001

然后我们使用下面命令进行运行,如果已经运行就直接访问http://ip:9001/

supervisord -c /etc/supervisor/supervisord.conf

停止运行的命令

supervisorctl -u user -p 123 -c /etc/supervisor/supervisord.conf shutdown

4、添加应用配置

上面的命令是可以运行supervisor的,但是我们的应用还没有添加,所以我们需要添加应用。

修改/etc/supervisor/supervisord.conf文件,找到最下面的include,去掉分号,改成自己的配置文件地址

include

files = conf.d/*.ini

添加项目的配置文件,我这里有三个应用,就分别建了三个配置文件

因为我这里是.net6的应用,所以command是donet。

复制代码
[program:app_admin]
directory=/home/zyh/app_admin/    ;工作目录,jar包路径
command=dotnet AI.Admin.Api.dll --urls=http://192.168.164.97:5000  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
stopsignal=QUIT  ;终止进程命令
user=root         ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups=20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/tmp/app_admin.log
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

配置完应用之后,可以再次启动supervisor进行一下测试。

5、配置开机启动

通常情况下我们都希望我们的应用可以开机启动,所以我们要配置supervisor开机自启动,所以我们创建一个service文件。

复制代码
vim /etc/systemd/system/supervisor.service

然后输入下面的内容,如果没有特别处理,路径通常都不需要修改

复制代码
[Unit]
Description=Supervisor daemon
 
[Service]
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecReload=/usr/bin/supervisorctl reload
ExecStop=/usr/bin/supervisorctl shutdown
User=your_user
Type=forking
 
[Install]
WantedBy=multi-user.target

然后我们启用Supervisor服务,使其开机自启:

sudo systemctl enable supervisor

配置完成,注意测试一下命令

sudo systemctl start supervisor

sudo systemctl reload supervisor

sudo systemctl stop supervisor

如果启动失败,注意看supervisord.conf文件内配置的相关路径的log中的失败日志。

相关推荐
phltxy21 小时前
LangChain从模型输出到RAG数据管道实战
服务器·人工智能·深度学习·语言模型·langchain
我星期八休息21 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
一个天蝎座 白勺 程序猿1 天前
从电网改造踩坑说起:深度拆解时序大模型TimechoAI的自主可控与安全合规底气
大数据·运维·服务器·大模型·timechoai
ShineWinsu1 天前
对于Linux:UDPsocket编程基础的解析
linux·运维·网络协议·udp·ip·端口号·进程间通信
hehelm1 天前
AI大模型接入SDK—通用模块设计
linux·开发语言·c++
Spider Cat 蜘蛛猫1 天前
Anthropic的skill-creator使用分享
运维·服务器
liulilittle1 天前
论分布式系统的半开闭问题
服务器·网络·分布式·系统架构·竞态
cyforkk1 天前
Vercel 绑定自定义域名极简配置指南
服务器·前端·网络
Ai拆代码的曹操1 天前
K8s Pod Pending 逐层排查:从 FailedScheduling 到 PVC StorageClass 不存在的实战记录
java·linux·kubernetes
Yang96111 天前
探索无线新视界:鼎讯信通DXMP系列频谱仪模块深度剖析
运维·网络