Ubuntu下java插件进程残留清理功能失效
关联原始issue:https://github.com/actiontech/sqle/issues/2348
版本信息(Version)
SQL:main 7e278a11b8c8bc02139de31fa9fe6e5d17d392d4
问题描述(Describe)
Ubuntu系统下,sqle使用java插件,当sqle异常退出后插件仍然残留,问题现象是在Ubuntu下sh -c启动java插件会有一个sh -c java -jar进程和插件本身两个进程存在(shll进程为sqle的子进程,java插件进程为shell的子进程),sqle在记录pid文件仅记录了shll进程,导致清理时仅清理了shll进程。 go插件和在Centos系统未出现此问题
截图或日志(Log)
如何复现(To Reproduce)
复现:添加java插件->启动sqle->模拟异常退出(kill -9)->重新启动sqle->查看插件进程信息 结果:存在残留的java插件进程
实现方案
问题原因:
Ubuntu和Centso默认使用了两种不同的shell,Ubuntu使用的是dash、而centos使用的是bash,dash启动的时候会产生一个单独的进程而bash不会
证:
Ubuntu:
Centos:
将Ubuntu dash改为bash:
模拟sqle退出后重启,插件未出现残留:
go插件在Ubuntu环境未出现此问题的原因是未使用sh -c启动。
解决方案: 不使用shell启动java插件,因sh -c启动是在shell中执行了java -jar命令,现直接使用oracle官方指定的java -jar启动方式。 https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE
变更影响面
受影响的模块或功能
java插件的启动
外部引用的潜在问题或风险
无
版本兼容性
兼容
测试建议
建议测试在Ubuntu和centos环境测试的时候使用ls -l /bin/sh看下是哪种shell,验证两种shell是否都不会出现该问题