首页 > 系统相关 >Linux_守护进程和部署各类程序的守护进程

Linux_守护进程和部署各类程序的守护进程

时间:2023-11-06 18:22:23浏览次数:25  
标签:systemd supervisor supervisord 配置文件 Linux 进程 守护

守护进程

 linux 系统进程管理工具systemd systemd 是内核启动后的第一个用户进程,PID 为1,是所有其它用户进程的父进程

守护进程脚本

1.在 Linux (ubuntu)中,可以使用 nohup 命令以守护进程的方式,在后台运行 Python 脚本。
  nohup 命令可以在终端关闭后继续执行脚本,并将脚本的输出重定向到一个文件中。
  
  tmux是一款Linux下的终端复用工具,可以开启不同的终端窗口来将应用程序作为后台守护进程执行,
  即使远程连接的SSH断开也不会影响程序的执行
  
  GNU Screen 可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
  
2.用shell脚本实现一个守护进程
    循环脚本-- 利用ps和wc,并结合svn启动命令进行svn进程的检测
    开机自启动 /etc/rc.local,在文件最后添加   /bin/start-jira.sh
	nohup /bin/start-jira.sh &
   ##脚本如下	
    #!/bin/sh
    #添加本地执行路径
    export LD_LIBRARY_PATH=./
     
    while true; do
            #启动一个循环,定时检查进程是否存在  或者#用ps获取$PRO_NAME进程数量
            server=ps aux | grep jira | grep -v grep
            if [ ! "$server" ]; then
                #如果不存在就重新启动
                cd /opt/atlassian/jira
    			./bin/start-jira.sh
                #启动后沉睡10s
                sleep 10
            fi
            #每次循环沉睡10s
            sleep 5
3. 	使用用systemd 处理你的守护进程
  systemd是Linux系统下的一个系统和服务管理器,可以用于守护进程运行,以thinkphp队列为例。可以使用以下命令创建一个systemd服务:
    01.为守护进程编写单元文件      
       保存文件为 /etc/systemd/system/queue.service ##针对各自的情况具体修改
	02.新单元文件被系统识别,我们需要重新加载系统守护进程本身   即重新加载systemd配置
4.使用第三方-Python 的进程管理工具
  systemd brings up the system. 
  
  Supervisor, the one written in Python, is for running an application, presumably in userspace	
   场景方面,supervisor 最多的应用是容器技术中  本身需要被监控 进程需在前台运行
    supervisord 和 systemd,都采用 ini 作为配置文件的格式。跟 supervisord 不同的是,
	   systemd 每个程序都要单独开一个 unit 文件。
       supervisord 可以同时启动/停止配置文件中所以的进程(或者某个进程组配置中的进程)
  
  
  PM2是一个带有负载均衡功能的Node.js应用的进程管理器	  
     pm2 基于Node.js开发,需要Node.js运行环境。pm2支持Linux、MacOS、Windows等多种平台。
     pm2 不仅可以守护Node应用,也可以守护Java、Python等多种其他类型的应用进程。
	 
  circus:是一个轻量级的进程管理工具,可以管理多个进程,并且可以进行自动重启。
     circus 支持多进程和负载均衡,并且提供了 Web 界面,方便管理进程。

windows 守护进程

 Windows 守护进程的工具,如WinService、AlwaysUp、FireDaemon Pro等
 NSSM(the Non-Sucking Service Manager)是Windows环境下一款免安装的服务管理软件
  srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行
 
 微软自己的 srvany		 

Java——spring boot

守护线程与jave服务的守护进程
简单Java阻止停止
为了保证一个服务能够持续有效地对外提供服务,一般会有相应的处理方式,比如:服务器上的守护进程脚本。
  但是,在Java代码层面,除了shell脚本之外,还有一种很特别的方式,保证服务不会执行后停止。死循环!文雅点叫自旋锁
Daemon的作用是为其他线程的运行提供服务,比如说GC线程
  Java中,守护线程(daemon thread)是一种特殊类型的线程,它在后台运行并提供服务,而不会阻止程序的退出
  Springboot的项目执行,依据的是run方法

supervisor简介

Supervisor是用Python开发的一套通用的进程管理程序,
 能将一个普通的命令行进程变为后台daemon。并监控进程状态,异常退出时能自动重启;
   Supervisor是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,
   这样只要在supervisor的配置文件中把要管理的进程的可执行文件的路径写进去即可。
1.组件
  supervisor 是一个守护套件,用于守护没有独立进程的工具,比如python、bash等等。
   它可以像系统服务一样守护多个进程,配置依赖关系、shell优先级、环境变量、开机自启、禁止或允许shell启动、print转发logger等等,
  功能丰富而强大。
  fancontrol、thermalctld、psud、syseepromd、xcvrd 等等都用此套件来保证脚本程序持续运行和异常恢复。
     lm-sensors 用于检测系统温度,thinkfan 用来控制风扇转速,cpufrequtils 用于控制CPU的频率。
  核心组件—— supervisor的服务器部分被命名为supervisord。 
      它负责在自己的调用下启动子程序,响应客户的命令,重新启动崩溃或退出的子进程,记录子进程的stdout和stderr输出,
  	并生成和处理与子进程生命周期内各点相对应的 “事件”。 
  	这通常位于/etc/supervisord.conf中。 这个配置文件是一个 "Windows-INI "风格的配置文件
  核心组件—— supervisorctl
     Supervisor的命令行客户端被称为supervisorctl。 它为supervisord所提供的功能提供了一个类似shell的接口。
	 
  核心组件 web Server  以及 xml-rpc interface---> 服务与web ui的同一个http服务器 ,提供一个xml-rpc接口	 
     xmlrpc是使用http协议作为传输协议的rpc机制,使用xml文本的方式传输命令和数据
	 
2.启动和运行过程
3.安装
    pip install supervisor
   配置		
     #通过输出信息可以确认supervisor服务是否安装成 echo_supervisord_conf
	 #重定向到/etc目录下  echo_supervisord_conf  >/etc/supervisord.conf
	 #创建子配置文件路径 mkdir -p /etc/supervisord.d/

 ##安装成功
 supervisor 进程管理服务程序安装完毕后,会在系统中生成两个主要的配置文件:
   主进程配置文件:/etc/supervisord.conf
   子进程配置文件:/etc/supervisord.d/
  
4.使用		
   01. # 利用命令启动服务程序supervisord -c /etc/supervisord.conf
	# 利用systemd管理启动服务systemctl start supervisord.service    
	-- 启动supervisor并加载默认配置文件 systemctl enable supervisord.service  
	-- 将supervisor加入开机启动项
	# 确认服务是否启动ps -ef|grep supervisorroot   

   02.要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/目录下,以.ini作为扩展
     例如:/etc/supervisord.d/test.conf
	 
   03.  supervisorctl
    supervisorctl status
    supervisorctl reload	重新启动配置中的所有程序	 

参考

https://blog.csdn.net/caoshiying/article/details/130028462
https://github.com/apachecn/apachecn-linux-zh-pt2/blob/master/SUMMARY.md
ApacheCN Linux 译文集(二  https://github.com/apachecn/apachecn-linux-zh-pt2/blob/master/docs/linux-sys-prog-tech/07.md
https://linux2.apachecn.org/#/
 Supervisor:优秀的进程管理工具 https://blog.csdn.net/sgyuanshi/article/details/115336417
systemd vs supervisord  https://segmentfault.com/a/1190000009338835
https://nssm.cc/	

标签:systemd,supervisor,supervisord,配置文件,Linux,进程,守护
From: https://www.cnblogs.com/ytwang/p/17813389.html

相关文章

  • Linux基础-查看dm的映射关系
    参考:https://www.cnblogs.com/aozhejin/p/16061309.htmlsudolvdisplay|awk'/LVName/{n=$3}/Blockdevice/{d=$3;sub(".*:","dm-",d);printd,n;}'   ......
  • Linux基础-xfs设备修复
    xfs文件系统,使用命令xfs_repair-L/dev/md0修复,一般情况修复后均可挂载,但是如果磁盘有问题,或者阵列出问题时此种修复可能会失败,挂载时依然要求格盘,只能进行格盘了。参考:https://blog.csdn.net/weixin_38642722/article/details/128763145 ......
  • Linux虚拟机联网教程(CentOS 7 64位)
    Linux联网第一步确保Linux虚拟机在关闭状态下操作,点击编辑虚拟机设置,然后在硬件条件下查看网络适配器设置,选择NTA模式。如图: 第二步在虚拟机界面下,选择编辑条件下的虚拟网络编辑器。如图: 之后也选择为NAT模式,“将主机虚拟适配器连接到此网络”也勾上。如图: 第三步......
  • Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
    通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入。文件IO方式操作GPIO,使用到了4个函数open、close、read......
  • Linux基础-清除主机缓存
    sync;echo3>/proc/sys/vm/drop_caches 关闭swap#关闭swapoff,关闭循环后,交换操作至少要等待40秒swapoff-a#开启swapswapon-a......
  • linux登陆防护fail2ban的优化配置
    fail2ban默认在iptables防火墙filter表的input链内设置规则,这样导致端口映射,和nat转发的流量不在fail2ban控制内。如果修改配置文件/etc/fail2ban/action.d#viiptables-common.conf  把INPUT链修改成FORWARD链后存在同样问题,会导致进入主机的流量不受控。这里需要在IN......
  • linux ps aux 结果解释
    #psaux|moreUSER      PID %CPU  %MEM  VSZ  RSS   TTY                  STAT      START   TIME    COMMANDaimin   1336299.113.61294252012641232?  R   13:12445:48/usr/local/lib64/R/bin......
  • Windows、Linux 和 Mac三个操作系统之间的对比来啦
    Windows系统、Linux系统与Mac系统:操作系统的对比与选择操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。以下是W......
  • python多进程提高性能
    在Python中,可以使用multiprocessing模块来实现多进程。下面是一个简单的例子,用来演示在Python中如何创建多个子进程:importmultiprocessingdefworker(num):"""打印子进程的编号"""print('Worker',num)if__name__=='__main__':#创建4个子进程foriin......
  • Process-与操作系统中的进程进行交互
    Process介绍在Java中,Process类是一个抽象类,它提供了与操作系统中的进程进行交互的方法。当你在Java程序中启动一个新的进程(例如,运行一个外部程序或脚本)时,JVM会创建一个Process实例来代表这个新的进程。Process类提供了以下主要的方法:getInputStream():获取进程的标准输出流。你......