首页 > 系统相关 >NAS安装及应用supervisor进程守护

NAS安装及应用supervisor进程守护

时间:2024-09-15 09:47:04浏览次数:1  
标签:supervisor supervisord NAS pip 进程 root 守护 ffmpeg

学会安装并使用supervisor进程守护, 再也不用担心进程无故消失/退出

背景/有什么用

NAS中进程守护的实践应用(Debian中也一样)

前文讲了在群晖NAS的后台中运行如下命令来实现推流

nohup ffmpeg -re -i "rtsp://admin:d****@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1" -c copy -f flv -y rtmp://192.168.6.116:1935/live/livestream 1>/dev/null 2>&1 &

推流 将摄像头的视频音频流 推到SRS服务器端(做为视频内容的输入口)

可是这个命令几度优化后(比如nohup让其进入后台运行, 不输出日志等), 还存在一个弊端: 运行几天以后, 这个进程会自动消失/退出. 不知道进程是如何退出的, 但结论就是自动退出并消失了.

想起可以使用一些进程守护的解决方案, 比如:

1. supervisor 进程守护

2. pm2 实现的“进程守护
PM2是开源的基于Nodejs的进程管理器,包括守护进程,监控,日志的一整套完整的功能,基本是Nodejs应用程序不二的守护进程选择

Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

使用2天的感受: 非常给力! 推流进程一直持续着, 再也不用手动去启动ffmpeg.

supervisorctl status输出了守护的进程信息

怎么用

先安装pip
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

最后输入 pip3 -V验证是否成功!

pip3 -V
pip 24.2 from /usr/lib/python3.8/site-packages/pip (python 3.8)

pip3 install supervisor

配置Supervisor

  1. mddir /etc/supervisord.d
    1. 创建管理目录
  2. cat /etc/supervisord.conf
    1. 显示默认的配置文件内容(如下所示)
  3. 然后复制模版(默认配置文件内容)以后去新建一个自己的守护的进程, 就是在这个模版的结尾 添加这样的章节 [program:ffmpeg]
    1. 其中ffmpeg就是程序唯一名称, 也就是命名一个特定的指令
  4. 最后使用命令运行 supervisord -c /etc/supervisord.d/ffmpeg.conf
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=5MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=1           ; # of main logfile backups; 0 means none, default 10
loglevel=warn                ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
silent=false                 ; no logs to stdout if true; default false
minfds=102                  ; min. avail startup file descriptors; default 1024
minprocs=20                 ; min. avail process descriptors;default 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[program:ffmpeg]                                        #程序唯一名称
directory=/bin/                                         #程序路径
command=ffmpeg -re -i "rtsp://admin:d****@192.168.6.126:554/cam/realmonitor?channel=1&subtype=1" -c copy -f flv -y rtmp://192.168.6.116:1935/live/livestream           #运行程序的命令
autostart=true                                          #是否在supervisord启动后tomcat也启动
startsecs=10                                            #启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true                                        #程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启;意思为如果不是supervisord来关闭的该进程则认为不正当关闭,supervisord会再次把该进程给启动起来,只能使用该supervisorctl来进行关闭、启动、重启操作
startretries=3                                          #启动失败自动重试次数,默认是3
user=root                                               #用哪个用户启动进程,默认是root
priority=999                                            #进程启动优先级,默认999,假如Supervisord需要管理多个进程,那么值小的优先启动
stopsignal=INT
redirect_stderr=true                                    #把stderr重定向到stdout标准输出,默认false
stdout_logfile_maxbytes=200MB                           #stdout标准输出日志文件大小,日志文件大小到200M后则进行切割,切割后的日志文件会标示为catalina.out1,catalina.out2,catalina.out3...,默认50MB
stdout_logfile_backups = 1                            #stdout标准输出日志文件备份数,保存100个200MB的日志文件,超过100个后老的将被删除,默认为10保存10个
stdout_logfile=/volume2/KingchuxingSSD512G/Maintenance/catalina.out      #标准日志输出位置,如果输出位置不存在则会启动失败
stopasgroup=false                                       #默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false                                       #默认为false,向进程组发送kill信号,包括子进程

supervisord启动

supervisord -c /etc/supervisord.d/ffmpeg.conf

启动supervisord进程,我们在配置文件中设置了 autostart=true 参数,在supervisord启动的时候 ffmpeg也随之启动

ps -ef|grep ffmpeg

程序管理  

supervisorctl status ffmpeg

supervisorctl start ffmpeg

错误:

supervisord -c /etc/supervisord.d/ffmpeg.conf            
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 /bin/supervisord -h                       

解决办法:

sudo unlink /tmp/supervisor.sock

相关内容

<iframe frameborder="0" height="500" scrolling="auto" src="https://query.carlzeng.top:3/appsearch?q=python" style="box-shadow: 0 0 20px -10px" width="100%"></iframe>

实现方法

命令以及日志输出(实例)

wget  https://bootstrap.pypa.io/get-pip.py


root@DS918:/etc# python3  get-pip.py                                                                          
Collecting pip                                                                                                
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection bro
ken by 'NewConnectionError(': Failed 
to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/d4/55/90db48d85f7
689ec6f81c0db0622d704306c5284850383c090e6c7195a5c/pip-24.2-py3-none-any.whl.metadata                          
  Downloading pip-24.2-py3-none-any.whl.metadata (3.6 kB)                                                     
Collecting setuptools                                                                                         
  Downloading setuptools-72.1.0-py3-none-any.whl.metadata (6.6 kB)                                            
Collecting wheel                                                                                              
  Downloading wheel-0.44.0-py3-none-any.whl.metadata (2.3 kB)                                                 
Downloading pip-24.2-py3-none-any.whl (1.8 MB)                                                                
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 40.6 kB/s eta 0:00:00                                  
Downloading setuptools-72.1.0-py3-none-any.whl (2.3 MB)                                                       
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 MB 38.3 kB/s eta 0:00:00                                  
Downloading wheel-0.44.0-py3-none-any.whl (67 kB)                                                             
Installing collected packages: wheel, setuptools, pip                                                         
Successfully installed pip-24.2 setuptools-72.1.0 wheel-0.44.0                                                
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing an
d want to suppress this warning. 


root@DS918:/etc# pip3 -V                                                                                      
pip 24.2 from /usr/lib/python3.8/site-packages/pip (python 3.8)  


root@DS918:/etc# pip3 install supervisor                                                                      
Collecting supervisor                                                                                         
  Downloading supervisor-4.2.5-py2.py3-none-any.whl.metadata (86 kB)                                          
Requirement already satisfied: setuptools in /usr/lib/python3.8/site-packages (from supervisor) (72.1.0)      
Downloading supervisor-4.2.5-py2.py3-none-any.whl (319 kB)                                                    
Installing collected packages: supervisor                                                                     
Successfully installed supervisor-4.2.5                                                                       
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.It is recommended to use a virtual environment i
nstead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.   
supervisord -c /etc/supervisord.d/ffmpeg.conf            
Error: .ini file does not include supervisord section                                                         
For help, use /bin/supervisord -h                       

错误解决办法: 在配置文件中添加supervisord section/章节

supervisorctl start ffmpeg                               
unix:///tmp/supervisor.sock no such file 

解决办法是:

运行时使用:

supervisord -c /etc/supervisord.d/ffmpeg.conf
vi /etc/supervisord.d/ffmpeg.conf   
1. 使用默认的模版
2. 在最后面添加一个章节 [program:ffmpeg]

异常处理

发现推流没有正常, 查询进程status, 一切正常; 期间的外网IP变化多次, 网络也不稳定了DDNS错误(重启了猫以后, wan3没有拨号成功, 导致所有的网络服务都失去正确的ip, ddns无法灵活动态获取成功拨号了的虚拟wan口IP, 怎么解决?)

解决办法:

supervisorctl restart ffmpeg

root@DS:~# supervisorctl status ffmpeg
ffmpeg                           RUNNING   pid 11310, uptime 19 days, 6:37:39
root@DS:~# supervisorctl restart ffmpeg
ffmpeg: stopped
ffmpeg: started

这样重启后, 推流马上正常了, 很方便, 直接了当略过了ffmpeg里面的细节.

推流异常

后来发现不是这个supervisor进程守护故障, 由于中继K2P将上游的K2P路由器无故攻击下线(由于WIFI的信道变化, 而下游K2P用正确的密码去不停连接错误信道的上游K2P路由器), 导致上游的K2P路由器变成无法上网的状态

这样的外围出错, 导致了上游K2P路由器无法上网而使TP1Z摄像头的断开了网络(它变成无法上网), 我不明白无法上网, 应该是并且导致它无法连接到SRS本地服务器, 这样就导致推流失败了.

当我找到推流异常问题的根源后, 通过 WIFI远程无线中继之K2P刷机Padavan无线桥接功能 来锁定信道后, 让上游的K2P路由器工作正常, 然后需要手动重新使用以下命令:

supervisorctl restart ffmpeg

来重新开启正常的推流. 通过这类外围故障, 更加印证了这个supervisor进程守护是可靠的.

然而进程虽然一直正常存在, 但不代表它一直正常按预期完成指定的任务!

灵感来源

Supervisor安装与配置二

动态公网IP 和 SRS-CarlZeng

标签:supervisor,supervisord,NAS,pip,进程,root,守护,ffmpeg
From: https://www.cnblogs.com/backuper/p/18414985

相关文章

  • [Java并发]守护线程
    守护线程和普通线程的最大区别是守护线程会在主线程结束后退出,但是普通线程在主线程结束后不会退出。普通线程的执行importjava.sql.Time;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassMain{publicstaticvoid......
  • 广州浮点Nastran软件许可优化实施成功案例
    Nastran许可证优化助力工程仿真企业提升效能、节约成本应用行业:航空航天使用软件:Nastran仿真分析软件一、背景介绍1.项目背景Nastran是全球知名的有限元分析(FEA)软件,广泛应用于航空航天、汽车制造、国防等领域,用于结构分析和动力学模拟。某大型航空航天企业在产品研发过程中高度......
  • 天空卫士项目荣获“2024 IDC 中国20大杰出安全项目 ”奖项 ,实力见证安全守护
    9月11日,IDC在上海圆满举办安全风险管控峰会,并现场官宣“2024IDC中国20大杰出安全项目(CSO20)”和“2024IDC中国CSO名人堂(十大人物)”奖项名单。联通软研院申报的联通邮件系统安全合规建设项目被评为“2024IDC中国20大杰出安全项目(CSO20)”。峰会现场聚集了近200位意见......
  • 九种加密源代码的实用方法,守护你的技术宝藏!
    源代码不仅是项目的核心,更是企业的宝贵资产。如何有效保护源代码安全,防止泄露和篡改,是每位开发者和企业必须面对的重要课题。下面带来九种加密源代码的实用方法,助你构建多层次的防护体系!1.文件级加密:这是最基础也最直接的方法。利用安企神软件,对单个或一组源代码文件进行......
  • nas硬盘掉线怎么办
    当NAS(网络附加存储)硬盘出现掉线问题时,可以采取以下步骤进行排查和解决:一、检查网络连接确认网络环境:确保NAS设备所在的网络环境稳定,没有频繁的网络波动或中断。检查网络交换机、路由器等设备的运行状态,确保它们正常工作。检查网线连接:确认NAS设备与网络设备(如交换机、路由器......
  • 一文搞定高并发编程:CompletableFuture的supplyAsync与runAsync
    CompletableFuture是Java8中引入的一个类,用于简化异步编程和并发操作。它提供了一种方便的方式来处理异步任务的结果,以及将多个异步任务组合在一起执行。CompletableFuture支持链式操作,使得异步编程更加直观和灵活。在引入CompletableFuture之前,Java已经有了Future接口来......
  • 宝藏级Docker应用推荐(建议NAS/AllinOne用户收藏)
    梳理收集了个人比较常用的Docker应用,这些应用大多免费开源,能极大提高的提高日常工作效率,也能充分榨干家里闲置设备资源,比如NAS、个人PC、主机服务器等。一、家庭娱乐中心类家庭影音、漫画、小说等1、影视类Jellyfin、Emby(个人可以不开通专业版,免费版够用)推荐原因:看电影......
  • 让小爱音箱播放电脑/NAS上歌曲,支持自动从哔哩哔哩/油管下载歌曲,无需刷机。支持语音控
    小米AI音箱很多人都有,但使用中播放歌曲时总是提示仅能播放试听版,不能完整听歌,很烦人。今天介绍的方法就是要彻底解决这个问题,实现让小爱AI音箱能够播放本地歌曲,本地没有的歌曲还能自动从网上搜索下载的功能。已测试支持的设备:型号名称L06A小爱音箱L07ARedmi小爱音......
  • 威联通NAS指南丨SMB、FTP、WebDAV等协议
    随着时代的发展,手机屏幕越来越大,拍照越来越清晰,影视画质更高清......同时也会遇到一些问题,拍照清晰了,占用内存也变大了;视频画质更好了,网盘容量跟不上了;大家对自己的数据隐私问题也更加敏感了。这时在家配置一台NAS是不错的选择,可将手机中的照片、视频备份到NAS中,告别手机内存......
  • 易基因:朱健康团队WGBS揭示主动DNA去甲基化缺失植物的DNA甲基化跨代增加|PNAS
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。DNA甲基化是一种在植物和哺乳动物中保守的表观遗传标记,对生长、发育、疾病和寿命具有重要作用。植物和动物基因组中DNA甲基化的主动获得或丢失,以及DNA甲基化水平变化可能导致减数分裂稳定的表观遗传变异,这些变异产生......