Skip to content

perf: 定时任务触发无有效步骤作业时的日志优化 #3878

@jsonwan

Description

@jsonwan

用户在配置好定时任务后,修改执行方案,关闭所有步骤,导致定时任务触发时没有任何步骤需要执行,当前的逻辑为触发失败并报错,会打印出2条错误日志,造成告警误告。
处理办法:这种由于用户数据配置错误导致的触发失败,在定时任务的触发失败原因字段中给出具体原因,将ERROR日志改为打印WARN日志即可。
当前的报错堆栈:
job-execute:

[2025-10-24 15:40:00.259] ERROR [job-execute,b1c1bc6c0f0e8b5e0e140803f65e604f,5696b3572b4f4774] 6 --- [http-nio-19804-exec-156] c.w.e.h.ServiceExceptionControllerAdvice : Handle InternalException, uri: /service/execution/task-execution/task

com.tencent.bk.job.common.exception.InternalException: null
	at com.tencent.bk.job.execute.service.impl.TaskExecuteServiceImpl.buildTaskInfoFromExecuteParam(TaskExecuteServiceImpl.java:1208)
	at com.tencent.bk.job.execute.service.impl.TaskExecuteServiceImpl.executeJobPlan(TaskExecuteServiceImpl.java:1026)
	at com.tencent.bk.job.execute.api.inner.ServiceExecuteTaskResourceImpl.executeTask(ServiceExecuteTaskResourceImpl.java:86)
	at jdk.internal.reflect.GeneratedMethodAccessor303.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:517)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at com.tencent.bk.job.common.web.filter.RepeatableReadWriteServletRequestResponseFilter.doFilter(RepeatableReadWriteServletRequestResponseFilter.java:58)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.cloud.sleuth.instrument.web.servlet.TracingFilter.doFilter(TracingFilter.java:68)
	at org.springframework.cloud.sleuth.autoconfig.instrument.web.TraceWebServletConfiguration$LazyTracingFilter.doFilter(TraceWebServletConfiguration.java:131)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.springframework.cloud.sleuth.instrument.web.tomcat.TraceValve.invoke(TraceValve.java:103)
	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:937)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.base/java.lang.Thread.run(Thread.java:840)

job-crontab:

[2025-10-24 15:40:00.336] ERROR [job-crontab,b1c1bc6c0f0e8b5e0e140803f65e604f,bc20410b0197a79f] 6 --- [quartz-scheduler_Worker-705] c.t.b.j.c.s.impl.ExecuteTaskServiceImpl  : Get execute task by cron caught exception|appId=1|taskId=5|cronTaskId=1|cronName=对照检查-检测xxx|operator=xxx

com.tencent.bk.job.common.exception.InternalException: 执行方案不合法
	at com.tencent.bk.job.common.web.feign.FeignErrorDecoder.decodeErrorCode(FeignErrorDecoder.java:95)
	at com.tencent.bk.job.common.web.feign.FeignErrorDecoder.decode(FeignErrorDecoder.java:64)
	at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:98)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:141)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:91)
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100)
	at jdk.proxy2/jdk.proxy2.$Proxy233.executeTask(Unknown Source)
	at com.tencent.bk.job.crontab.service.impl.ExecuteTaskServiceImpl.executeTask(ExecuteTaskServiceImpl.java:79)
	at com.tencent.bk.job.crontab.timer.executor.SimpleJobExecutor.executeInternalInternal(SimpleJobExecutor.java:146)
	at com.tencent.bk.job.crontab.timer.AbstractQuartzJobBean.executeInternal(AbstractQuartzJobBean.java:87)
	at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75)
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: feign.FeignException$InternalServerError: [500 ] during [POST] to [http://job-execute/service/execution/task-execution/task] [ServiceExecuteTaskResource#executeTask(ServiceTaskExecuteRequest)]: [{"success":false,"code":1244011,"errorType":11,"errorMsg":"执行方案不合法","data":null,"requestId":"b1c1bc6c0f0e8b5e0e140803f65e604f","authResult":null,"errorDetail":null}]
	at feign.FeignException.serverErrorStatus(FeignException.java:250)
	at feign.FeignException.errorStatus(FeignException.java:197)
	at feign.FeignException.errorStatus(FeignException.java:185)
	at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:92)
	at com.tencent.bk.job.common.web.feign.FeignErrorDecoder.decode(FeignErrorDecoder.java:49)
	... 11 common frames omitted

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlog需求初始状态,等待产品进行评估kind/enhancement功能改进特性

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions