在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。

此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。

在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。原因有两点:

1、它是微软官方文档推荐的,降低学习成本。

2、它并不一定是最好的,但一定是文档最全的。

Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。

官方文档:http://supervisord.org/

目前存在三个问题

问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。

问题2:如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。

问题3:如果服务器宕机或需要重启我们则还是需要连入shell进行启动。

为了解决这个问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。

操作如下:

1、  安装Supervisor

执行以下命令:

yum install python-setuptools
easy_install supervisor

或者

如果easy_install不好使就从官方下载:
wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz
然后通过python安装:
tar zxf supervisor-3.3.1.tar.gz
cd supervisor
python setup.py install

  如果报错可能:

  1. 提示setuptools-0.6c11.tar没有安装

    下载https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
    tar zxf setuptools-0.6c11.tar.gz
    cd setuptools-0.6c11/
    python setup.py build
    python setup.py  install

  2. 提示下载错误,需meld3>0.6.5
    1. 下载 http://dl.fedoraproject.org/pub/epel/7/x86_64/p/python-meld3-0.6.10-1.el7.x86_64.rpm(或者我备份了一份)
    2. 安装 rpm -ivh python-meld3-0.6.10-1.el7.x86_64.rpm

  如下提示,安装完成:

  Using /usr/lib64/python2.7/site-packagesFinished processing dependencies for supervisor==3.3.1

  

2、 配置Supervisor

a.创建文件夹和配置文件

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

b.修改/etc/supervisor/supervisord.conf文件内容

在文件结尾[include]节点处

把;files = relative/directory/*.ini

改为files = conf.d/*.conf

c.执行supervisorctl reload命令使配置文件生效。

d.在/etc/supervisor/下创建conf.d文件夹,及ProjectName.conf(以项目名称命名的)

e.打开ProjectName.conf文件,添加内容如下:

[program: ProjectName]
command=dotnet ProjectName.dll ; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔 

保存并退出

 

3、 运行supervisord,查看是否生效,执行以下命令:

supervisord -c /etc/supervisor/ supervisord.conf
ps -ef | grep ProjectName

返回

root     27007 27006  1 13:21 ?        00:00:02 dotnet ProjectName.dll
root     27026 26810  0 13:23 pts/0    00:00:00 grep --color=auto ProjectName

表示运行成功!

浏览器访问站点…

注意:在执行第一条命令出现以下提示信息时:

Error: Another program is already listening on a port that one of our HTTP servers is configured to use.
Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord –h

是因为有一个使用supervisor配置的应用程序正在运行,需要执行supervisorctl shutdown命令终止它,或重新创建一个ProjectName.conf文件再执行第一条命令。

如果运行supervisorctl出现以下错误

error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.6/socket.py line: 567

可能是由于supervisord进程停止了,建议重新运行

sudo supervisord -c /etc/supervisor/supervisord.conf
sudo supervisorctl -c /etc/supervisor/supervisord.conf

4、 常用命令

sudo service supervisor stop 停止supervisor服务sudo service supervisor start 启动supervisor服务supervisorctl shutdown #关闭所有任务 supervisorctl stop|start program_name #启动或停止服务 supervisorctl status #查看所有任务状态

   

5、 配置supervisord开机启动

a.在指定目录下创建文件supervisord.service

vim /usr/lib/systemd/system/supervisord.service

b.输入以下内容:

[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

提示:

Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.

验证是否为开机启动:

systemctl is-enabled supervisord

提示:

enabled

表示设置成功!

至此,创建supervisor守护进程完毕。

参考:

Supervisor的安装与使用入门

CentOS 6.4安装 Python2.7.10

将ASP.NET Core应用程序部署至生产环境中(CentOS7)

转载于:https://www.cnblogs.com/Hai--D/p/5820718.html

Linux Supervisor的安装与使用入门相关推荐

  1. suse linux运行asp,Linux Supervisor的安装与使用入门---SuSE

    在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个系统与用户进行交流的界 ...

  2. linux打开文件夹安装,Linux Supervisor的安装与使用入门

    在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个系统与用户进行交流的界 ...

  3. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

  4. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  5. 大数据开发基础入门与项目实战(二)Java Web数据可视化之3.Linux概述、安装和结构

    文章目录 前言 1.Linux概述 (1)Linux简介 (2)Linux的应用领域及版本介绍 2.安装Linux (1)VMWare的安装 (2)使用VMWare构建虚拟机器 (3)安装CentOS ...

  6. linux安装ppt教程视频教程下载,Linux教程ch2Linux安装及入门.ppt

    Linux教程ch2Linux安装及入门.ppt (68页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.9 积分 第二章 Linux安装及入门 Li ...

  7. kylin linux 安装教程,新手入门必备:kylin安装教程介绍!

    1. 背景 最近在学习kylin,在安装的时候遇到一些坑,特意记录起来,也希望同样在学习kylin的人,少踩一些坑(要是连安装都过不去,还怎么学!!!). 2. 环境 我选的kylin版本是1.5.4 ...

  8. linux验证cuda安装成功_Linux环境CUDA 4.0入门:验证安装

    [IT168 技术]通过之前的文章,笔者介绍了如何在Linux环境下安装CUDA 4.0.因为Linux系统版本众多,因此即使按照相关步骤进行操作,也可能会出现问题.如何验证安装正确与否是本文将要讲解 ...

  9. python3安装教程win10_在win10和linux上分别安装Python虚拟环境|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/python.html 很多初学者会使用windows作为开发机使用, 今天就来看下如何在win10和Linux下分别安装Python虚 ...

最新文章

  1. PyTorch中文版官方教程来啦(附下载)
  2. 数据库使用--MySQL: InnoDB 还是 MyISAM?
  3. PHP学习:文件操作
  4. IdentityServer4实战 - 与API单项目整合
  5. js 多个定时器_JS中的同步/异步编程
  6. 手把手教你用Python求最大值和最小值
  7. 【英语学习】【Daily English】U07 Restaurant L02 I don't think this is what I ordered?
  8. 支付宝最不想看到的:当“集五福”变成赚钱生意 有人日入千元!
  9. Android---- android计量单位--dip、px、sp之间区别与联系pixs =dips * (densityDpi/160). dips=(pixs*160)/d...
  10. php array walk recursive,php中如何使用array_walk_recursive?
  11. 线切割软件测试工资,线切割自动编程软件可以得到免费测试版
  12. android 盒子gpu,挑选电视盒子时CPU和GPU哪个更重要?
  13. 2016山东教师教育网- 一师一优课
  14. IDEA编译错误PersistentEnumerator storage corrupted
  15. Android Studio实现连连看小游戏,比比看谁过关最快~
  16. OWASP-安全编码规范
  17. SQL 使用别名(使用 AS 关键字)
  18. vue 二维码+条形码识别
  19. 【cocos2dx 3.10】android studio真机调试的配置
  20. nas 微型计算机,NETGEAR无线路由器和NAS试用

热门文章

  1. 2022-2028年中国环保设备行业投资分析及前景预测报告
  2. 安全保密领域人工智能的应用
  3. starrocks问题小结
  4. gensim的word2vec如何得出词向量(python)
  5. 凭借128核芯片,安培寻求提供可靠的进步
  6. 用NVIDIA-TensorRT构造深度神经网络
  7. 二分查找模板全面总结
  8. 2021年大数据Spark(十九):Spark Core的​​​​​​​共享变量
  9. 快速android app开发,快速學會開發 Android App
  10. Java 反射 (快速了解反射)