在Linux系统中,“哨兵进程”通常指用于监控、守护或告警的后台任务,常见于数据库高可用(如Redis Sentinel)、业务监控脚本、自研守护服务等场景,关闭这类进程需根据其启动和管理方式采取不同方法,本文将结合常见场景详细说明操作步骤,并附注意事项总结及常见问题解答。
明确哨兵进程的类型与启动方式
关闭哨兵进程前,需先确认其具体类型:是独立运行的脚本、由systemd
管理的系统服务,还是通过进程管理工具(如supervisor
、pm2
)启动的守护进程?不同类型的进程关闭方式差异较大,可通过以下命令初步判断:
ps -ef | grep -v grep | grep "哨兵关键词"
(如redis-sentinel
、monitor_script
等),查看进程的启动命令,若包含/usr/bin/systemctl
、/usr/bin/supervisord
等路径,则对应由systemd
或supervisor
管理。
常见场景下的哨兵进程关闭方法
场景1:独立运行的Shell脚本或二进制程序(如通过nohup
、&
启动)
这类进程通常直接以命令形式运行,无系统服务管理,关闭步骤如下:
-
定位进程ID(PID)
使用ps
命令查找进程:ps -ef | grep -v grep | grep "哨兵进程关键词"
输出示例:
root 1234 1123 0 10:30 pts/0 00:00:10 /usr/bin/redis-sentinel /etc/redis/sentinel.conf
其中
1234
即为进程PID。 -
正常关闭进程(推荐优先尝试)
先发送SIGTERM
信号(15),允许进程清理资源(如保存状态、关闭连接):kill 1234
若进程未响应(如卡死),可等待5-10秒后检查进程是否仍在运行:
ps -ef | grep 1234
-
强制关闭进程(无响应时使用)
若SIGTERM
无效,发送SIGKILL
信号(9),强制终止进程:kill -9 1234
-
检查残留子进程
部分哨兵进程会创建子进程,需通过进程树确认:pstree -p 1234
若存在子进程,需单独关闭其PID(如
kill -9 子进程PID
)。 -
清理自启配置(如设置开机自启)
若进程通过/etc/rc.local
或用户定时任务(crontab
)自启,需移除相关配置:- 编辑
/etc/rc.local
,删除启动命令; - 运行
crontab -e
,删除包含哨兵进程的定时任务。
- 编辑
场景2:由systemd
管理的系统服务(如Redis Sentinel、自定义服务)
现代Linux发行版(如Ubuntu、CentOS 7+)常用systemd
管理服务,关闭步骤更规范:
-
查看服务状态
systemctl status 哨兵服务名(如redis-sentinel)
输出中会显示
Active: active (running)
表示进程运行。 -
停止服务
systemctl stop 哨兵服务名
若需立即停止(跳过优雅关闭),可加
--kill-who=all
参数:systemctl stop --kill-who=all 哨兵服务名
-
禁用自启(防止下次开机自动启动)
systemctl disable 哨兵服务名
验证自启状态:
systemctl is-enabled 哨兵服务名 # 输出"disabled"表示已禁用
-
检查服务日志(确认关闭原因)
若服务异常关闭,可通过日志排查:journalctl -u 哨兵服务名 -n 50
场景3:通过进程管理工具(supervisor
、pm2
)启动的哨兵进程
(1)supervisor管理(常用于Python进程)
-
查看进程状态:
supervisorctl status
输出示例:
monitor_script RUNNING pid 1234, uptime 1d
-
停止进程:
supervisorctl stop monitor_script
-
移除进程配置(可选,彻底清理):
编辑/etc/supervisor/conf.d/哨兵进程.conf
,删除配置文件后重载supervisor:supervisorctl reread && supervisorctl update
(2)pm2管理(常用于Node.js进程)
-
查看进程列表:
pm2 list
-
停止进程:
pm2 stop 哨兵进程名或ID
-
删除进程(彻底移除):
pm2 delete 哨兵进程名或ID
不同场景关闭方法总结表
场景类型 | 查找命令 | 关闭命令 | 注意事项 |
---|---|---|---|
独立脚本/二进制程序 | ps -ef | grep "关键词" |
kill PID → kill -9 PID |
检查子进程,清理自启配置(rc.local/crontab) |
systemd管理服务 | systemctl status 服务名 |
systemctl stop 服务名 + disable |
查看日志journalctl 排查异常 |
supervisor管理进程 | supervisorctl status |
supervisorctl stop 进程名 |
删除配置需reread +update |
pm2管理进程 | pm2 list |
pm2 stop 进程ID + delete |
Node.js进程需确保资源释放 |
相关问答FAQs
Q1:关闭哨兵进程后如何确认是否彻底关闭?
A:可通过以下方式验证:
- 进程检查:运行
ps -ef | grep -v grep | grep "哨兵关键词"
,确保无相关进程; - 端口检查:若哨兵进程监听端口(如Redis Sentinel默认26379),运行
netstat -tulpn | grep 端口号
,确认端口已释放; - 日志检查:查看哨兵进程日志文件(如
/var/log/redis/sentinel.log
),确认无新日志输出或“进程退出”类记录; - 服务状态:若为
systemd
服务,运行systemctl is-active 服务名
,输出应为inactive
。
Q2:哨兵进程关闭后会影响哪些服务?如何避免业务中断?
A:影响取决于哨兵功能:
- Redis Sentinel:关闭后Redis集群失去自动故障转移能力,主节点故障时需手动切换,可能导致服务短暂不可用;
- 业务监控脚本:关闭后相关监控指标(如CPU、内存、业务接口状态)无法采集,告警失效;
- 业务守护进程:若哨兵负责拉起崩溃的业务进程,关闭后业务进程无法自动恢复。
避免中断的措施:
- 关闭前备份:保存哨兵配置文件(如Redis Sentinel配置)和关键数据;
- 告知相关方:提前通知运维或开发人员,避免误判故障;
- 临时替代方案:如Redis哨兵关闭,可手动监控主从状态,准备手动故障转移;
- 测试验证:在非生产环境测试关闭流程,确认影响范围。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33989.html