Linux配置Supervisor 配置遇到的坑

2023-05-16

在linux中web 应用部署到线上后之后发现退出终端后网站就无法访问了

所以需要用Supervisor来守护进程,它可以保证应用一直处于运行状态,在遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务。

在安装配置Supervisor时遇到了挺多坑,我们先看一下安装流程

复制代码


$ # 安装Supervisor
$ yum install python-setuptools 
$ easy_install supervisor
$ # 自定义配置Supervisor
$ mkdir /etc/supervisor
$ echo_supervisord_conf > /etc/supervisor/supervisord.conf  

复制代码

1,然后打开/etc/supervisor/supervisord.conf ,注意我这里打开的是/etc/supervisor/supervisord.conf而不是/etc/supervisord.conf,我上面自定义配置Supervisor两句命令其实就是在新建的supervisor文件夹下面复制的/etc/supervisord.conf文件,我这里在配置的时候由于看了别人的博客,linux命令不熟悉,所以之前没看懂自定义配置那两句命令的意思,所以索性按照这样做了,不过配置完成后个人感觉没必要自己新建一个文件夹然后复制一份配置,完全可以直接打开/etc/supervisord.conf进行配置就够了

2,打开配置文件后你会看到[include] files = supervisord.d/*.ini(后缀或者.conf) 意思就是关联对应的配置文件下面后缀为.ini的所有配置文件,如果你是直接编辑的/etc/supervisord.conf文件,那就找到/ect/supervisord.d文件在里面建一个后缀.ini的配置文件,然后进行配置,如果你也和我一样加了上面自定义配置那两句话,那就在对应的/etc/supervisor/文件下新建一个supervisord.d(这文件名是自定义的,只要与[include]节点后面的文件名匹配就好了)文件夹并在这个新建的文件夹下面新建配置就好了

3,在建好的文件夹下面新建好配置文件后配置如下代码

复制代码


[program:项目名称]
command=dotnet 项目名称.dll 
directory=/root/www/hacker/publish
autorestart=true
stderr_logfile=/var/log/日志.err.log
stdout_logfile=/var/log/日志.out.log 
environment=ASPNETCORE_ENVIRONMENT=Production 
user=root
stopsignal=INT
autorestart=true
startsecs=1  

复制代码

4,运行 


$ supervisord -c /etc/supervisor/supervisord.conf  

5,查看supervisord是否运行,下面显示运行成功


ps aux | grep supervisord  

6,supervisord.conf配置文件说明

复制代码


[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid

;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]
files = relative/directory/*.ini    ;可以指定一个或多个以.ini结束的配置文件  

复制代码

 7,supervisorctl 操作

supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:

输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面,就可以在下面输入命令了。:

  • help # 查看帮助
  • status # 查看程序状态
  • stop program_name # 关闭 指定的程序
  • start program_name # 启动 指定的程序
  • restart program_name # 重启 指定的程序
  • tail -f program_name # 查看 该程序的日志
  • update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)

也可以直接通过 shell 命令操作:

  • supervisorctl status
  • supervisorctl update

8,遇到问题

问题一:unix:///var/run/supervisor/supervisor.sock no such file

解决方案


sudo chmod 777 /run

sudo chmod 777 /var/log  

问题二:Unlinking stale socket /var/run/supervisor/supervisor.sock

解决方案


unlink /var/run/supervisor/supervisor.sock  

问题三: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.


ps aux | grep supervisord
kill - 9 进程ID  

如果还有其他问题可以到你配置的日志目录下面去查看日志

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux配置Supervisor 配置遇到的坑 的相关文章

  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 研究缓冲区溢出时应该使用哪些版本的 GCC 或标志?

    最近 作为计算机工程专业的本科生 我一直在研究缓冲区溢出 出于兴趣 我开始研究缓冲区溢出 但在尝试在我的计算机上用 GCC 4 9 1 在 Debian Jessie 中 编译的我自己的 C 程序中实现它们时遇到了困难 我听说较新的编译器中
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 来源和出口有什么区别?

    我正在编写一个 shell 脚本 以读取具有 key value 对的文件并将这些变量设置为环境变量 但我有疑问 如果我这样做source file txt是否会将该文件中定义的变量设置为环境变量 或者我应该逐行读取文件并使用导出命令设置它
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog

随机推荐

  • 数据结构 马踏棋盘 栈应用 C++

    include lt iostream gt 包含其它头文件 using namespace std const int StackInitSize 61 10 const int StackInc 61 10 typedef int SE
  • STM32智能小车------红外遥控

    文章目录 一 原理讲解1 实物图2 工作原理 xff1a 3 接线 xff1a 二 软件驱动代码1 驱动函数2 获取键值 总结最终效果 大家好哇 xff01 我是小光 xff0c 嵌入式爱好者 xff0c 一个想要成为系统架构师的普通大学生
  • UCOS学习(一)——前后台系统、RTOS系统

    大家好哇 xff01 我是小光 xff0c 嵌入式爱好者 xff0c 一个想要成为系统架构师的大二学生 最近开始学习UCOS操作系统 xff0c 后面会更新一些关于UCOS学习笔记 今天了解了UCOS操作系统 xff0c 总结一下知识点 感
  • UCOS学习(二)——UCOS-II、UCOS-III移植到STM32F103

    大家好哇 xff01 我是小光 xff0c 嵌入式爱好者 xff0c 一个想要成为系统架构师的大二学生 最近开始学习UCOS操作系统 xff0c 后面会更新一些关于UCOS学习笔记 今天学习了如何将UCOS II和UCOS III移植到ST
  • UCOS学习(三)——任务管理基础

    大家好哇 xff01 我是小光 xff0c 嵌入式爱好者 xff0c 一个想要成为系统架构师的大二学生 最近开始学习UCOS操作系统 xff0c 后面会更新一些关于UCOS学习笔记 今天学习了任务管理基础知识 感谢你的阅读 xff0c 不对
  • UCOS学习(七)——信号量详解

    信号量 信号量简介信号量保护共享资源举个栗子 xff1a 如果不使用信号量信号量解决公共资源问题创建信号量 xff1a 信号量实现任务同步总结 信号量简介 信号量像是一种上锁机制 xff0c 代码必须获得对应的钥匙才能继续执行 xff0c
  • Altium Designer(AD)的简易使用

    一 绘制原理图 原理图库 首先来说明原理图的概念 根据百度百科 xff0c 原理图 xff0c 顾名思义就是表示电路板上各器件之间连接原理的图表 也就是表示芯片上的引脚连接什么元件 xff0c 各个元件谁和谁相连 xff0c 电源电压的大小
  • STM32CubeIDE---HAL库PWM使用速记

    一 如何计算 理论分析 xff1a HAL库函数之呼吸灯 PWM波 简书 jianshu com 预分频系数 PSC 自动重装载值 ARR 捕获 比较寄存器值 CCR 频率计算 xff1a 定时器频率 PSC 43 1 ARR 43 1 占
  • mac常用命令

    mac清除电脑DNS缓存 sudo dscacheutil flushcache
  • IMU初介绍及里程计相关补充

    IMU原理 xff1a 以牛顿力学定律为基础 xff0c 通过测量载体在惯性参考系的加速度 xff0c 将它对时间进行积分 xff0c 且把它变换到导航坐标系中 xff0c 就能够得到在导航坐标系中的速度 偏航角和位置等信息 IMU xff
  • C语言变量的定义与声明,为什么全局变量不能赋值

    文章目录 一 对C语言程序的一些补充二 定义域声明2 1 什么是变量2 2 如何定义变量2 3 为什么要定义变量2 4 定义变量的本质2 5 变量声明的本质2 6 定义和声明的区别 三 全局变量无法赋值 一 对C语言程序的一些补充 对于一个
  • 野火PID上位机通信移植

    野火PID上位机通信移植 一 简介 在调试pid参数的时候 xff0c 需要用到上位机 xff0c 这里选用 野火多功能调试助手 使用调试助手 xff0c 需要下位机与上位机之间的通信协议 xff0c 下载野火关于电机的相关例程 xff0c
  • 实验报告数字图像的基本操作

    一 实验目的 了解Matlab的基本功能及操作方法练习图像读写和显示函数的使用方法掌握如何利用MATLAB来获取图像的大小 颜色 高度 宽度等等相关信息熟悉常用的图像文件格式与格式转换 xff1b 二 实验环境 PC计算机MatLab软件
  • 【meArm机械臂】第二篇·Arduino控制程序

    系列文章目录 meArm机械臂 第一篇 结构设计及搭建 meArm机械臂 第二篇 Arduino控制程序 文章目录 系列文章目录前言一 测试程序1 单个电机测试程序2 四舵机控制测试程序3 极限位置测量 二 基本控制程序三 最终控制程序总结
  • 【树莓派4B】安装Ubuntu Mate20.04+ROS Noetic+使用电脑自带的xrdp和VNC进行PC端远程控制

    目录 前言 一 烧录Ubuntu Mate20 04 1 下载Ubuntu Mate 20 04 2 格式化SD卡并烧录系统 3 打开SSH功能 二 配置Ubuntu环境 1 初次开机进行简单的配置 2 更换国内源 3 更新软件列表和软件
  • 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【ROS】ROS上位机使用Serial库和boost::asio库与STM32进行USART通讯

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【STM32】STM32F103C8T6使用外部中断法和输入捕获法进行编码器测速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【STM32】STM32F103C8T6实现直流电机速度PID控制

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • Linux配置Supervisor 配置遇到的坑

    在linux中web 应用部署到线上后之后发现退出终端后网站就无法访问了 所以需要用Supervisor来守护进程 xff0c 它可以保证应用一直处于运行状态 xff0c 在遇到程序异常 报错等情况 xff0c 导致 web 应用终止时 x