ASP.NET Core应用程序发布linux在putty中运行是正常的。可一但putty关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题
安装 Supervisor 及配置 Supervisor
1.yum install python-setuptools 2.easy_install supervisor #安装Supervisor 3.mkdir /etc/supervisor 4.echo_supervisord_conf > /etc/supervisor/supervisord.conf #配置 Supervisor
4.配置
cd /etc/supervisor
ls
supervisord.conf文件
5. 文件的最后
;[include] ;files = relative/directory/*.ini
改成(【注意】去掉;且不能有空格)
[include] files = conf.d/*.conf
6.进入目录 /etc/supervisor/
新建 conf.d
文件夹,conf.d
文件夹下新建 netcore.conf
文件
内容(【注意】看 第二行 第三行的 注释,根据实际名字填入)
mkdir /etc/supervisor/conf.d --创建conf.d文件夹
ls
cd conf.d
vi netcore.conf --创建netcore文件并且向里面添加内容
[program:netcore] command=dotnet mhqtalks.dll ; (注意)运行程序的命令 directory= /home/netcore/mhqtalks/ ; (注意 注意)对应的你的项目的存放目录,这个地方好多初学者搞错!!! autorestart=true ; 程序意外退出是否自动重启 stderr_logfile=/var/log/netcore.err.log ; 错误日志文件 stdout_logfile=/var/log/netcore.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 user=root ; 进程执行的用户身份 stopsignal=INT
运行supervisord并查看
7 supervisord -c /etc/supervisor/supervisord.conf
8 ps -ef | grep netcore # 这行命令是查看有关netcore的所有进程 ,【注意】netcore是上面 program:netcore 的命名 ,如果你看到如下图 ,说明运行成功,如果没有成功可以看上面配置的那个错误日志文件
9 supervisorctl reload #最后重新载入配置
配置Supervisor开机启动
打开目录 /usr/lib/systemd/system/
新建文件 supervisord.service
内容:
# dservice for systemd (CentOS 7.0+) # by ET-CS (https://github.com/ET-CS) [Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/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 enable supervisord systemctl is-enabled supervisord #来验证是否为开机启动
到此,完工。现在重新电脑什么都不用管,直接可以访问部署好的网站。
下面整理一些关于 Supervisor 的命令 ,参考链接https://segmentfault.com
命令 | 说明 |
---|---|
supervisord | 初始启动Supervisord,启动、管理配置中设置的进程 |
supervisorctl stop myproject | 停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon |
supervisorctl start myproject | 启动某个进程 |
supervisorctl restart myproject | 重启某个进程 |
supervisorctl stop groupworker | 重启所有属于名为groupworker这个分组的进程(start,restart同理) |
supervisorctl stop all | 停止全部进程,注:start、restart、stop都不会载入最新的配置文件 |
supervisorctl reload | 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 |
supervisorctl update | 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。注意:显示用stop停止掉的进程,用reload或者update都不会自动重启 |
温馨提示:如果要结束某个守护进程,我们可以 ps -ef | grep supervisord 查出所有守护进程相关的进程,然后再用 kill -9 pid 结束进程
【ps -ef |grep 输出的具体含义】:
(1)ps -ef |grep+服务名来对于查询服务是否正常运行
ps:将某个进程显示出来
-A 显示所有程序。
-e 此参数的效果和指定"A"参数相同。
-f 显示UID,PPIP,C与STIME栏位。
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行
(2)那每一项具体表示的含义呢?从左往右依次表示为:UID PID PPID C STIME TTY TIME CMD
各相关信息的意义:
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
STIME 系统启动时间
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
想详细学习一下supervisor的可以看一下底下的推荐文章,包括设置web管理界面等等。