Linux Supervisor的安装与使用入门

简介: Linux Supervisor的安装与使用入门

Linux Supervisor的安装与使用入门

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

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

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

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

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

3、nohup 无法后台挂起的,它也许可以帮助你

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

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

安装

yum install -y epel-release
yum install -y supervisor

默认配置文件:/etc/supervisord.conf
进程管理配置文件放到:/etc/supervisord.d/目录下即可

配置

配置文件中 /etc/supervisord.conf 注意include的文件夹以及后缀

[include]
files = supervisord.d/*.ini  

下面是配置Tomcat进程的一个例子:

[program:tomcat]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true

我的配置文件

[program:pierced]
command=/root/pierced/ding -config=/root/pierced/ding.cfg -subdomain=community 8081
stdout_logfile=/root/pierced/logs/catalina.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true

启动

启动并查看是否生效,执行以下命令

supervisord -c /etc/supervisord.conf
ps -ef | grep pierced

# 返回内容
[root@localhost supervisord.d]# ps -ef | grep pierc
root     20964 20918  0 16:54 ?        00:00:00 /root/pierced/ding -config=/root/pierced/ding.cfg -subdomain=community 8081
root     21721 27871  0 16:55 pts/3    00:00:00 grep --color=auto pierc

常用命令

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

# 如果新增了配置文件 可以在命令行使用 update更新子任务
sudo supervisorctl update    # 默认更新全部 后面加 任务文件名 启动特定任务

管理supervisor子任务

可以使用 supervisorctl命令在控制面板查看当前运行的任务

演示

#  控制面板操作
supervisor> restart app   # 重启任务  app任务名, 任务文件.ini中设置的  [program:app]
supervisor> stop app   # 停止任务
supervisor> update app # 启动app
supervisor> status app  # 查看状态
supervisor> exit  # 退出
supervisor> help  # 一共这么多命令

default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update 
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

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守护进程完毕。

常见问题

1.unix:///var/run/supervisor.sock no such file
问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
解决办法:supervisord -c /etc/supervisord.conf

2.command中指定的进程已经起来,但supervisor还不断重启
问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,这里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d
解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个

3.使用过程中发现了一个很大的问题

就是执行supervisorctl shutdown 或者 supervisorctl stop的时候 任务虽然被关闭了,但是我们执行的命令还在运行 并没有被kill

服务启动后,是多进程模式,就需要注意一下,项目代码内是否有处理主进程被 kill,然后向子进程发送 kill signal,如果没有就需要到相应服务的 supervisor管理配置文件声明:stop 主进程时(主进程接收到 stop 信号),然后向同组的子进程发送 kill signal,保证子进程彻底退出,加入如下配置项即可:

killasgroup=true
stopasgroup=true
相关文章
|
25天前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
|
1月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
552 67
|
17天前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
38 5
Linux系统之安装OneNav个人书签管理器
|
19天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
43 5
Linux系统之安装Ward服务器监控工具
|
1天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
9 5
|
21天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
33 2
Linux系统之安装cook菜谱工具
|
23天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
84 4
Linux系统之Ubuntu安装cockpit管理工具
|
24天前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
53 1
Linux系统之Centos7安装cockpit图形管理界面
|
7天前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
39 3
|
1月前
|
存储 Oracle 关系型数据库