目录:
1. 概述编辑
本文介绍 定时调度任务 中一些报错及解决方案。
2. 运行监控报错整理编辑
定时调度任务执行失败时,「运行监控」的「任务执行明细」中,对应日志右边会有问号标志。鼠标点击时会显示对应的报错信息。如下图所示:
本节提供「运行监控」处常见报错信息及对应原因、排查方法。
2.1 文件名称过长导致附件生成失败
报错信息:
报错信息为Result file creation failed: (附件名称),如下图所示:
这通常会导致后续附件处理任务时(如邮件发送等)出现找不到文件报错,或发送的附件大小为 0kb 等问题。
原因分析:
定时调度任务执行时会生成.cpr、.pdf、.xls等格式的附件,这些附件的文件名来自定时调度任务设置中的「文件名称」,如下图所示:
文件名称这里可以使用公式,计算后的实际文件名可能超过操作系统对文件名长度的限制(一般为 255 左右),导致文件生成失败。
注:定时调度可以使用的公式请参见:定时调度支持的公式
解决方案:
修改定时调度任务设置,使用更短的文件名称。
2.2 数据集配置错误
报错信息:
报错信息为数据集配置错误Query: wait millis xxxxx, active xx, maxActive xxxx,如下图所示:
原因分析:
定时调度执行模板计算时,需要连接模板用到的数据连接进行取数。当连接超时时,会报上数据集配置错误。
解决方案:
以管理员身份进入数据决策系统,点击「管理系统>数据连接」,进入定时调度任务中模板使用的数据连接,增大「高级设置」下的「最大等待时间」。示例如下图所示:
2.3 定时调度任务超时
报错信息:
报错信息为TimeoutException,如下图所示:
原因分析:
定时调度任务在执行超过 5 分钟(默认)时,会有上述提示。上述提示并不会中断任务执行,如果任务后续执行成功了,会正常记录成功日志。
解决方案:
如果是因为模板计算量较大,导致执行时间超过了 5 分钟,可以选择关闭这个超时提示或者延长超时提示出现的时间。
1)若不希望显示这个报错,可在 fine_conf_entity 表中修改「ScheduleSettingConfig.taskTimeout」字段值,根据任务的实际执行情况调高该超时阈值来延后超时提醒。
注1:这里单位为毫秒,如默认的 5 分钟记为 300000 。
注2:如果配了 Nginx 等转发,不可超过 Nginx 内配置的转发超时时间。
2)2020-01-15及之后的 JAR,若需要彻底取消该提示,可在 fine_conf_entity 表中修改「ScheduleSettingConfig.timeoutRemind」字段值为「false」,取消超时检查和提醒,但不影响任务本身的执行流程。
注1:修改 FineDB 数据库表字段值需要使用第三方管理软件连接 FineDB 数据库,在第三方管理软件中修改表字段值。
注2:使用第三方管理软件连接 FineDB 数据库的方法请参考 使用第三方管理软件连接工程内置 HSQL 数据库 FineDB
2.4 邮件发送报错
2.4.1 535 Error: authentication failed
报错信息:
报错信息为535 Error: authentication failed,如下图所示:
原因分析:
连接到 SMTP 服务器的用户名或密码错误。
解决方案:
核对连接到 SMTP 服务器的用户名和密码。注意对于大部分邮箱,SMTP 服务器的用户名密码跟登录邮箱的用户名密码不同,一般在邮箱的设置页面会有配置。
2.4.2 Couldn't connect to host
报错信息:
报错信息为Couldn't connect to host(timeout可能为其他值),如下图所示:
原因分析:
因为网络原因无法连接到 SMTP 服务器。
解决方案:
检查配置的 SMTP 服务器地址和端口是否正确且能联通。可以 ping 地址得到 ip ,然后telnet ip port确认能否联通。
2.4.3 Invalid Addresses
报错信息:
报错信息为Invalid Addresses,如下图所示:
原因分析:
收件人(或抄送、密送)中含有无效邮箱地址,具体地址也会一同提示,如上图中的notexist12345@163.com。
解决方案:
检查并删除收件人(或抄送、密送)中的无效邮箱地址。
2.4.4 response: 421
报错信息:
com.fr.schedule.output.EmailException: javax.mail.MessagingException: Could not connect to SMTP host: SMTP.163.com, port: 25, response: 421;
原因分析:
邮箱服务器地址和端口配置存在问题。
SMTP 主机已达最大联机数量。
解决方案:
请收信者和邮件管理者确认收信端邮件服务器是否正常作业。
收件者 SMTP 主机拒绝提供服务,因为已经超过其能提供的最大服务量。可通过提高 SMTP 服务器的频率或者将任务拆分开来解决。
2.5 邮件发送成功但收不到邮件
报错信息:
无报错信息,运行监控中显示邮件发送成功,但实际没有收到。
原因分析:
原因一般是 SMTP 服务器投递的邮件被收件人邮箱拒收了。可以登录 SMTP 服务对应的邮箱(即「系统管理」中配置的邮箱),检查是否有退信相关邮件。
解决方案:
根据对应邮箱的退信规则,排查退信原因。
2.6 SMTP 服务器报错
报错信息:
定时任务发送邮件,收件人数量较多时,SMTP 服务器报错,报错内容中含too many recipients字样, 如下图所示:
原因分析:
平台负责将邮件信息(收件人、抄送、密送、主题、正文等)发送给 SMTP 服务器,由 SMTP 服务器根据这些信息发送邮件,平台本身并不进行实际邮件的发送;
造成该报错的实际原因为「收件人」或「抄送」或「密送」的邮箱数量超过了 SMTP 服务器的限制,不同的 SMTP 服务器所限制的数量可能不一样。
解决方案:
方案一:减少默认用户组中用户的数量,由于不同的 SMTP 服务器所限制的数量可能不一样,建议用户数量在 500 以内。
方案二:提高 SMTP 服务器对收件人的限制,需要客户方的 SMTP 服务器管理人员做修改,由于不同的 SMTP 服务器修改方式不相同,本文暂不提供修改方法。
3. 其他编辑
3.1 附件乱码
问题描述:
Linux 系统中,定时任务「调度对象」中对象类型为BI 模板,附件中的 PDF 文件中文乱码,图表组件和表格组件也出现中文乱码的情况。
原因分析:
系统没有安装中文字体。
解决方案:
系统安装对应字体后,定时调度导出的文件正常。
3.2 结果链接无法正常跳转
问题描述:
设置定时任务发送邮件时,在「邮件通知」中勾选了「正文加上结果链接」,点击邮件中的结果链接,出现图一或图二的报错,报错内容:非常抱歉,您无法查看该页面,如需访问请联系管理员
如下图所示:
原因分析:
可能是用户在「调度对象」步骤中勾选了「任务结束即清理」。
解决方案:
取消勾选「任务结束即清理」,勾选「仅保留最近一次」、「仅保留最近5次」、「不清理」、「自定义」中任意一个即可。
3.3 邮件结果链接 URL 以 localhost 开头
问题描述:
定时调度任务「调度对象」步骤中「对象类型」选择「报表模板」,「文件处理」步骤中,处理方式选择「邮件通知」,「邮件内容设置项」中勾选「正文加上结果链接」。收到的邮件点击结果链接,链接 URL 以localhost开头。如下图所示:
用户希望localhost转成实际 IP 。
解决方案:
1)将数据决策系统的 URL 改成实际 IP ,例如:http://ip:端口/工程名/decision,如下图所示:
2)在平台新建定时调度任务或重新编辑保存之前任务,点击邮件中的结果链接,链接 URL 开头改变。如下图所示:
3.4 定时调度任务总是提前/延后固定小时数执行
问题描述:
定时调度任务总是提前/延后数小时执行,且该值恒定,常见的为 8 小时等。
原因分析:
首先排查 FineDB 所在机器时区是否正确,Windows 则在命令提示符下使用tzutil /g,回显China Standard Time则为正常,Linux 则在 Bash 下使用date -R,回显中包含 +0800 则为正常。
其次排查平台工程所在机器时区是否正确,方法同上。
最后排查平台所在工程 JVM 时区是否正确,可新建类 Test ,内容为下述代码,编译成Test.class文件上传至平台工程所在机器,执行java Test,若回显Asia/Shanghai则为正确。
import java.util.TimeZone;
public class Test{
public static void main(String[] args) {
System.out.println(TimeZone.getDefault());
}
}
上述回显的具体时区,以客户实际所在时区为准。
解决方案:
若机器时区不正确,则联系客户修改系统时区。
若 JVM 时区不正确,则需要添加-Duser.timezone=Asia/Shanghai的 JVM 启动参数:如果是 Tomcat 等容器启动,则添加至容器的JAVA_OPTS位置,与设置内存大小的 -Xmx/-Xms 位置相同;如果是设计器/安装版 BI 直接启动,在启动器同目录下有designer.vmoptions或finebi.vmoptions,将上述参数添加至其中即可。