jinrong58 commented on issue #14032: URL: https://github.com/apache/dolphinscheduler/issues/14032#issuecomment-1568058392
我在使用shell类型任务时也遇到了同样的问题,我的ds是3.1.6版本,我的shell脚本是一个可以一直运行的脚本,用ds调度让他运行看起来很完美,它可以正常工作。但当我点击流程实例中的停止按钮时,页面返回任务已经被kill了。但我在服务器上看到该shell进程仍然在运行。为了定位该问题,我进行了远程调试,目前基本定位导致该问题有以下两个制约因素:1、点击“停止”按钮时,会去判断t_ds_task_instance表中的pid字段是否为0,如果为0就认为该进程已经停止,而我跟踪过程中发现,一个正常调度运行起来的shell任务,pid值一直为0,这就导致点击“停止”按钮时ds判断任务已经停止,而只在前端更新了状态,实际的进程并没有被杀掉。为了验证这个想法,我手动将一个正在运行的task_instance的pid设为一个不为0的数字,然后点击“停止”按钮,发现ds� ��始执行真正的kill行为,先尝试进行软杀,如果杀不掉就调用pstree列出所有的相关进程进行强杀。这就引出第二个制约因素 2、强依赖pstree命令,而我的centos7系统默认没有该命令,先用软杀杀不掉,然后调用pstree命令也没有,就又杀进程失败了。当我安装了pstree命令后,终于可以正常的杀掉运行的shell进程。貌似问题的原因找到了,但我还没找到一个快速修复它的方法,因为我发现表中的该条数据是TASK_EXECUTE_RUNNING时写入的,此时是拿不到真正的进程id的,但是后续shell脚本一直处于运行状态,就没有其它的taskevent送过来,所以它的pid也就一直得不到更新。大神们有遇到这个问题木有? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
