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

发布时间 2023-11-06 18:20:18作者: 辰令

守护进程

 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/