Centos上部署netcore项目

1 准备工作

  在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式。

首先我们写一个简单的netcore控制台项目(netcore mvc、webapi本质都是一个控制台项目),项目名称就叫HelloWorld,代码如下:

    class Program
{
static void Main(string[] args)
{
var tokenSource = new CancellationTokenSource();
//业务,异步执行,每隔1秒输出一次working
Task.Factory.StartNew(() =>
{
while (!tokenSource.IsCancellationRequested)
{
Console.WriteLine($"{DateTime.Now}: Woking...........");
Thread.Sleep();
}
}).ContinueWith(t =>
{
Console.WriteLine("成功退出!");
Environment.Exit();
}); //读取配置文件,如果配置文件stop为No,主线程休眠1秒
var configuration = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("setttings.json",optional:true,reloadOnChange:true)
.Build();
while ("No".Equals(configuration["stop"], StringComparison.CurrentCultureIgnoreCase)){
Thread.Sleep();
} //让异步业务结束
tokenSource.Cancel();
}
}

  代码执行一个异步任务,每秒输出一次[time:working....],主线程每秒查询配置文件一次,只有当配置文件中的stop不等于No时,主线程才能执行 tokenSource.Cancel() 方法,Cancel方法会让异步任务停止。运行结果如下:

  代码比较简单,我们直接演示怎么在Centos上部署项目吧。

2 使用nohup部署

   介绍这种部署放方式前,首先认识一下 nohup command & 命令。这条命令表示:不挂断地后台执行command,输出在当前目录的nohup.out 文件中(补充:如果当前目录的nohup.out文件不可写,那么输出在 $HOME/nohup.out 文件中)。nohub表示不挂断执行,&表示后台执行。下边我们看一下怎样使用nohub来部署我们的项目。

  首先发布项目,我习惯在windows上使用VS发布,然后通过文件上传工具(如FileZilla)上传到centos上。当然我们也可以使用  dotnet publish -o [somepath] -c release  命令在centos上发布。怎么把发布的文件传到Centos上就不细说了(推荐使用FlieZilla文件上传工具)。我们把发布的文件放在Centos的Apps/HelloWorld目录下,如下:

  然后执行 nohup dotnet HelloWorld.dll & 即可,非常简单。输出保存在nohup.out文件下,看一下执行效果:

  一个小细节:如果我们直接关闭Centos命令窗口可能会造成程序停止,尽量使用exit命令退出命令终端。

3 使用supervisord部署

  使用supervisord进行netcore项目部署是一种比较主流的方式,我们先了解一下supervisord吧!

  Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的进程变为daemon(守护进程),并监控进程状态,异常退出时能自动重启了,被管理的进程被当作supervisor的子进程。supervisor可以控制这些子进程的开始,停止等。我们把一个进程交给supervisor管理时,可以给这个被管理的进程添加一个配置文件,用于设置这个进程是否自动启动、记录日志位置等。

部署项目

  这里我们把发布文件放在Apps/HelloWorld2目录下。首先安装supervisor,安装命令如下:

# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务
# systemctl status supervisord # 查看supervisord服务状态

  安装supervisor完成后,我们给HelloWorld2项目添加一个配置文件,配置文件统一放在 /etc/supervisord.d 目录下,我们添加一个HelloWorld.ini配置文件,内容如下图:

  添加完配置文件后,使用 systemctl restart supervisord.service 命令重启supervisord服务,因为我们在上边的ini文件中设置的自动启动(autostart=true),所以我们的HelloWorld2项目会自动启动。我们可以通过supervisord来查看管理的进程状态,停止和启动进程等。我们也可以使用  supervisorctl stop/start all 来停止/启动管理的所有进程。

  总结:使用supervisord部署netcore应用十分简单:①添加一个xxx.ini配置文件  ②重启supervisord 即可。

ini配置文件的具体配置可以参考supervisor官网,有一位园友的博客总结的很不错:进程管理supervisor的简单说明。有兴趣的小伙伴可以深入研究一下。

netcore项目在Centos部署:nohup和supervisor方式的更多相关文章

  1. 基于Maven的SpringBoot项目实现热部署的两种方式

    转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...

  2. netcore项目在Windows部署:使用NSSM部署Windows服务

    NSSM部署Windows服务 1 准备工作 在Windows平台部署Asp.net core应用程序一般采用IIS,但是如果我们的net core应用执行的是定时任务,需要开机自启,稳定运行的话,使 ...

  3. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  4. 在Linux服务器部署 .NET-Core 项目

    一.文章概要  这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...

  5. 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S

    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish   等几个常用命令. 2.了解Dock ...

  6. 部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  7. 阿里云部署Node.js项目(CentOS)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...

  8. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  9. NetCore项目的部署

    NetCore项目和以前的AspNet项目在部署上有很大的不同,因为NetCore是跨平台的 NetCore支持Kestrel和IIS两种方式,看代码的11行和14行 using System.IO; ...

随机推荐

  1. 如何知道一个EXE使用什么开发语言开发的

    一般是看EXE调用哪些DLL,这可以使用VC++中的工具Dependency Walker,它可以列出静态链接的所有DLL. 如果EXE中的DLL包括MSVBVM60.DLL,则是使用VB 6.0开发 ...

  2. 彻底卸载注册表、流氓软件的工具Uninstall Tool

    Your Uninstaller 和Uninstall Tool都可以卸载Windows系统卸载不干净的软件和注册表驱动等 Uninstall Tool下载

  3. SQL语句将一个表的数据写入到另一个表中

    在日常的数据库运维过程中,有时候需要将Select查询出来的数据集写入到另一个数据表中,其中一种方式是通过存储过程循环写入数据,另一种简便的方式是直接使用Insert Into语句后面跟上Select ...

  4. saiku环境搭建

    说明:搭建saiku环境,BI展示工具. 环境说明: os:windows7 jdk:jdk1.6.0_43 tomcat:apache-tomcat-7.0.62 saiku:saiku-ui-2. ...

  5. 解决Editor.md通过代码块原样输出Emoji被强制解析问题

    Editor.md是一款优秀的开源Markdown 编辑器,在使用中遇到的一些问题和功能改进分享给需要的伙伴. 项目地址 https://github.com/pandao/editor.md 问题 ...

  6. java 位运算符 以及加法 交换两个变量值

    先给出十转二的除法 2       60 30       0 15 0 7 1 3 1 1  1 0  1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...

  7. SQLserver2008一对多,多行数据显示在一行

    现在有一个需求 我们有一张表employee EmpID EmpName ---------- ------------- 张山 张大山 张小山 李菲菲 李晓梅 Result I need in th ...

  8. 发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存

    AppendFileVersion 是一个VSIX插件支持vs2015意以上版本 是我用来发布时一键添加html中的css标签和script标签版本号来防止浏览器缓存 分享给大家! download ...

  9. Laravel-任务调度

    简介Cron 是 UNIX.SOLARIS.LINUX 下的一个十分有用的工具,通过 Cron 脚本能使计划任务定期地在系统后台自动运行.这种计划任务在 UNIX.SOLARIS.LINUX下术语为 ...

  10. linux cp 直接覆盖不提示信息 解决方法

    默认情况下,cp覆盖时,无论加什么参数 -f 之类的 还是提示是否覆盖. 原因是:服务器会默认增加别名 alias cp=’cp -i’,当你执行cp时,其实执行的是cp –i. [root@ltt0 ...