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