前言:
很久没写博客了,这两天工作比较少,脑袋“发热”买了台阿里云服务器,配置1核2G内存,系统选择CentOS8.2,还申请了个自己的域名,总共花了110块RMB。目的是想自己写点东西验证一下。
先简单写个demo部署到服务器上,验证环境和网络是否正常。
准备
创建一个名称为Research.Web的ASP.NET Core项目,目标框架.NET Core5.0,发布后用xftp上传到服务器/prodic/research.web目标。
使用xshell登录服务器,登录账号用root
安装aspnetcore运行时命令
sudo dnf install aspnetcore-runtime-5.0
使用dotnet Research.Web.dll命令运行程序,一切正常,浏览器访问如下(建议大家发布的时候用该命令运行一下,避免因程序有问题造成发布后无法访问。)
接下来需要一个守护进程工具管理进程,并且系统启动时自动启动我的web站点。因为以前在工作中使用过国内大牛宇内**写的jexus,所以一开始想用jexus,但又看到很多同行使用Supervisor来作为.NET Core站点的进程守护工具,看了介绍和几篇博客后觉得Supervisor简单易用,当然jexus用起来也很简单,而且功能强大。但是我没用过Supervisor,所以想用一用,最终决定选择Supervisor,官方网址:https://pypi.org/project/supervisor。
Supervisor官方介绍
Supervisor是一个客户端/服务器系统,允许其用户控制类似UNIX的操作系统上的许多进程。
支持平台
Supervisor已经过测试,并且已知可以在Linux(Ubuntu),Mac OS X(10.4、10.5、10.6)和Solaris(对于Intel为10)和FreeBSD 6.1上运行。在大多数UNIX系统上,它可能会正常工作。
Supervisor将无法在任何Windows版本下运行。
Supervisor旨在在Python 3版本3.4或更高版本以及Python 2版本2.7上工作。
Supervisor安装
注意,本文中因为使用root账号登录,所有命令前不需要加suto,不是root账号或者没有对应权限的请在命令前添加sudo,如sudo yum install supervisor。
安装命令
yum install supervisor
安装完成可以看到版本号为4.2.1……
安装成功后,在/etc/目录下会自动生成supervisord.conf文件和supervisord.d目录,如下图所示
说明:
supervisord.conf文件是supervisor自身的配置文件
supervisord.d目录是用来存放被守护进程的配置文件
配置守护进程配置目录
接下来添加并配置supervisor要守护的进程配置文件。
用命令vi打开supervisord.conf文件,在文件内容末尾找到
[include]
files = supervisord.d/*.ini
如果不是该配置请改为该配置,如果行前面有分号,则去掉分号。
意思就是包含supervisord.d目录下所有以ini结尾的配置文件。后面我们将会把需要守护的进程配置添加到这个目录中。
然后敲Esc键,输入:wq退出。
添加被守护进程配置文件
接下来进入到supervisor.d目录,在supervisord.d目录中添加research.web.ini配置文件
添加文件命令
touch research.web.ini
编辑research.web.ini文件,将以下内容添加到文件中
[program:research.web] command=dotnet Research.Web.dll ; 运行程序的命令 directory=/prodic/research.web/ ; 命令执行的目录 autorestart=true ; 程序意外退出是否自动重启 stderr_logfile=/var/log/researchweb/researchweb.err.log ; 错误日志文件 stdout_logfile=/var/log/researchweb/researchweb.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 user=root ; 进程执行的用户身份 stopsignal=INT
然后敲Esc键,输入:wq退出编辑。
执行以下命令使配置生效
systemctl enable supervisord.service
执行以下命令重新载入配置,并重启supervisor服务
supervisorctl reload
查看运行状态命令
supervisorctl status
这里可以看到supervisor守护了两个进程,分别是pudefu.web和research.web(上文添加的被守护进程)。
配置supervisor开机自动启动
执行命令检查开机配置是否已经存在
systemctl enable supervisord.service
返回Failed to enable unit:Unit file supervisord.service does not exist.表示不存在。
定位到/lib/systemd/system目录下,并创建supervisord.service文件
创建supervisord.service文件命令
touch supervisord.service
接着使用vi命令编辑supervisord.service文件,将以下代码复制到文件中
[Unit] Description=Supervisor Process Monitoring and Control Daemon After=network.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
保存并退出。
重新载入守护进程并启动
systemctl daemon-reload
systemctl start supervisord.service
执行以下命令检查是否开机启动
systemctl enable supervisord.service
如果没有返回Failed to enable unit:Unit file supervisord.service does not exist.表示开机启动已经配置成功。至此,配置完成。
supervisor常用命令
supervisord //初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl status //查看所有任务状态信息
supervisorctl reload //重新启动并载入最新的配置文件,并按新的配置启动、管理所有进程。
supervisorctl shutdown //关闭所有任务(关闭后用reload重启)
supervisorctl start all //启动所有进程
supervisorctl stop all //停止所有进程
supervisorctl restart all //重启所有进程(restart不会重新载入最新的配置文件。可使用reload或者update命令)
supervisorctl start|stop|restart <name> //控制指定进程,name为进程名称
supervisorctl version //查看版本号
supervisorctl pid //查看进程id
supervisorctl tail [-f] <name> [stdout | stderr](默认stdout) //查看进程日志信息,stdout是普通日志,stderr是错误日志
supervisorctl clear <name> //清空指定进程的日志,name为进程名称
supervisorctl clear all //清空所有进程日志