sqle icon indicating copy to clipboard operation
sqle copied to clipboard

Ubuntu下java插件进程残留清理功能失效

Open iwanghc opened this issue 1 year ago • 0 comments

关联原始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)

image image

如何复现(To Reproduce)

复现:添加java插件->启动sqle->模拟异常退出(kill -9)->重新启动sqle->查看插件进程信息 结果:存在残留的java插件进程

实现方案

问题原因: Ubuntu和Centso默认使用了两种不同的shell,Ubuntu使用的是dash、而centos使用的是bash,dash启动的时候会产生一个单独的进程而bash不会 证: Ubuntu: image Centos: image 将Ubuntu dash改为bash: image image image 模拟sqle退出后重启,插件未出现残留: image

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是否都不会出现该问题

iwanghc avatar Jun 28 '24 06:06 iwanghc