Linux Supervisor的安装与使用入门---Ubuntun

Linux Supervisor的安装与使用入门 

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

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

在 Linux 上有不少能够管理进程的工具,咱们使用 Supervisor 来作这个事情。缘由有两点:linux

一、它是微软官方文档推荐的,下降学习成本。shell

二、它并不必定是最好的,但必定是文档最全的。vim

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

官方文档:http://supervisord.org/服务器

 

目前存在三个问题asp.net

问题1:ASP.NET Core应用程序运行在shell之中,若是关闭shell则会发现ASP.NET Core应用被关闭,从而致使应用没法访问,这种状况固然是咱们不想遇到的,并且生产环境对这种状况是零容忍的。 python2.7

问题2:若是ASP.NET Core进程意外终止那么须要人为连进shell进行再次启动,每每这种操做都不够及时。 socket

问题3:若是服务器宕机或须要重启咱们则仍是须要连入shell进行启动。

 

为了解决这个问题,咱们须要有一个程序来监听ASP.NET Core 应用程序的情况。在应用程序中止运行的时候当即从新启动。

 建议使用 root 管理员帐户操做

操做以下:

一、  安装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

  以下提示,安装完成:

1
2
Using /usr/lib64/python2.7/site-packages
Finished processing dependencies  for  supervisor==3.3.1

   

二、 配置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 ; 自动重启间隔
复制代码

保存并退出

 

三、 运行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

 

四、 经常使用命令

1
2
3
4
5
6
7
8
9
sudo service supervisor stop 中止supervisor服务
 
sudo service supervisor start 启动supervisor服务
 
supervisorctl shutdown #关闭全部任务
 
supervisorctl stop|start program_name #启动或中止服务
 
supervisorctl status #查看全部任务状态

   

五、 配置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守护进程完毕。

原文连接:https://www.cnblogs.com/Hai--D/p/5820718.html

相关文章
相关标签/搜索