解决关闭shell会话窗口则会发现ASP.NET Core应用也会被关闭

本文介绍了三种在Linux上运行和管理ASP.NETCore应用程序的方法:使用nohup命令,将程序配置为systemd服务,以及通过Supervisor进行守护和管理。对于nohup的使用,文章提到了解决输出重定向的问题。systemd服务配置包括启动命令和自动重启设置。Supervisor的配置较为详细,包括安装、配置文件编写、开机启动设置以及使用Web界面管理应用。
摘要由CSDN通过智能技术生成

原文地址:https://www.cnblogs.com/yaodun55/p/16309270.html

一、使用nohup命令即可  【最简单】

nohup dotnet xxxx.dll 【xxxx为应用名称】

一般会报:nohup: ignoring input and appending output to 'nohup.out'

解决方法命令:nohup dotnet Zhong.Famers.WebApi.dll --urls="http://*:8080" /dev/null 2>&1  &

最少增加“&”

如果已经配置端口可以使用:nohup dotnet ntxs.WebApi.dll &

二、将程序配置为服务  

1、vim /etc/systemd/system/su.service

[Unit]
Description=su   ##服务名称

[Service]
WorkingDirectory=/home/yjcz/api  ##应用存放目录
ExecStart=/usr/bin/dotnet /home/yjcz/api/SU.WebApi.dll    ##应用启动命令

# 程序崩溃后自动启动
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=su.service   
# 用户角色
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
# The default value is 90 seconds for most distributions.
TimeoutStopSec=90

[Install]
WantedBy=multi-user.target

2、通过systemctl命令管理

启用服务进程 
systemctl enable appname.service

启动服务进程
systemctl start appname.service

查看进程状态
systemctl status appname.service

重启进程
systemctl restart appname.service

停止进程
systemctl stop appname.service

查看日志,实时显示程序console信息
journalctl -fu appname.service
 

3、关于.netcore应用程序更新

可以直接覆盖旧的应用程序文件,然后使用systemctl restart 命令重启进程,不需要先关闭进程后覆盖文件再启动。

三、使用Supervisor守护ASP.NET Core应用程序  【比较繁琐但有web界面,微软推荐】

1、安装Python包管理工具

使用下面的命令安装Python包管理工具:

1、yum install python-setuptools

如下图所示:

2、安装Supervisor

使用下面的命令安装Supervisor:

  1. easy_install supervisor

如下图所示:

3、配置Supervisor应用守护

通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件,命令如下:

  1. mkdir /etc/supervisor
  2. echo_supervisord_conf > /etc/supervisor/supervisord.conf

如下图所示:

然后我们编辑supervisord.conf文件,在文件的尾部添加如下配置:

  1. ;conf.d 为配置表目录的文件夹,需要手动创建
  2. [include]
  3. files = /etc/supervisor/conf.d/*.conf

如下图所示:

然后我们手动创建一个conf.d文件夹:

  1. mkdir /etc/supervisor/conf.d

如下图所示:

创建完成后的目录结构如下图:

supervisord.conf是主配置文件,应用程序配置文件放在conf.d文件夹下面。然后为应用程序创建一个名为AspNetCoreDeployDemo.conf的文件,并放到目录"/etc/supervisor/conf.d/"下,文件内容:

  1. [program:AspNetCoreDeployDemo] ;程序名称,终端控制时需要的标识
  2. command=dotnet AspNetCoreDeployDemo.dll ; 运行程序的命令
  3. directory=/root/NetCore/FDD/ ; 命令执行的目录
  4. autorestart=true ; 程序意外退出是否自动重启
  5. stderr_logfile=/var/log/AspNetCoreDeployDemo.err.log ; 错误日志文件
  6. stdout_logfile=/var/log/AspNetCoreDeployDemo.out.log ; 输出日志文件
  7. environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
  8. user=root ; 进程执行的用户身份
  9. stopsignal=INT
  10. startsecs=10 ;自动重启时间间隔

执行下面的命令运行supervisord,查看是否生效:

  1. supervisord -c /etc/supervisor/supervisord.conf
  2. ps -ef | grep AspNetCoreDeployDemo

成功后的效果:

这时我们在浏览器里面访问:

这样就可以访问了。可以看到,这时我们就不需要在启动命令行了。而且关闭shell窗口也可以获取数据。

如果服务已经启动,修改配置文件可用“supervisorctl reload”命令来使其生效。

4、配置Supervisor开机启动

我们新建一个“supervisord.service”文件,文件内容如下:

  1. # dservice for systemd (CentOS 7.0+)
  2. # by ET-CS (https://github.com/ET-CS)
  3. [Unit]
  4. Description=Supervisor daemon
  5. [Service]
  6. Type=forking
  7. ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
  8. ExecStop=/usr/bin/supervisorctl shutdown
  9. ExecReload=/usr/bin/supervisorctl reload
  10. KillMode=process
  11. Restart=on-failure
  12. RestartSec=15s
  13. [Install]
  14. WantedBy=multi-user.target

将文件上传至"/usr/lib/systemd/system/"目录下,然后执行下面的命令:

  1. systemctl enable supervisord

如下图所示:

执行下面的命令来验证是否为开机启动:

  1. systemctl is-enabled supervisord

如下图所示:

到此为止,配置就完成了。我们可以重启虚拟机来验证一下是否开机就会启动应用程序。这里已经测试过了,重启虚拟机,然后用root用户登录就可以直接访问应用程序。

我们还可以使用Web管理界面来管理supervisor,在web管理界面,可以进行进程的重启,日志查看等操作。

web界面操作需要在supervisor的配置文件里添加[inet_http_server]选项组,我们使用记事本文件打开supervisord.conf文件,去掉[inet_http_server]选项组前面的";":

修改之后重新加载服务:

  1. supervisorctl reload

如下图所示:

由于使用了9001端口,所以我们需要把9001端口添加到防火墙中:

  1. firewall-cmd --zone=public --add-port=9001/tcp --permanent

如下图所示

修改完防火墙之后需要重启防火墙配置:

  1. firewall-cmd --reload

然后在浏览器里面访问url:http://192.168.254.128:9001/,如果配置正常,则会要去输入用户名和密码,输入配置文件里面的用户名和密码即可登录,登录成功以后界面如下所示:

在这里就可以看到正在运行的进程,而且还可以重启、停止等操作。

5、总结

Supervisor常用的相关命令如下:

  1. supervisorctl restart <application name> ;重启指定应用
  2. supervisorctl stop <application name> ;停止指定应用
  3. supervisorctl start <application name> ;启动指定应用
  4. supervisorctl restart all ;重启所有应用
  5. supervisorctl stop all ;停止所有应用
  6. supervisorctl start all ;启动所有应用

如果在执行命令的过程中,报下面的错误:

Error: .ini file does not include supervisorctl section

For help, use /usr/local/bin/supervisorctl -h

如截图这样:

需要切换到/etc/supervisor目录在执行上面的命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值