Linux环境时区说明:Oozie Coordinator任务时间格式解析与调整请求
嘿,我来帮你把这个时间配置的问题拆解清楚,顺便给你调整步骤:
一、先解释你提到的 2018-03-26T14:08Z UTC 时间格式
这个是ISO 8601标准的UTC时间格式,每个部分的含义:
2018-03-26:标准日期格式YYYY-MM-DD,对应2018年3月26日T:日期和时间的分隔符,是ISO 8601格式的固定写法14:08:UTC时区下的时分(下午2点08分)Z:是UTC时区的简写,和后面标注的UTC完全等价,用来明确这是零时区的时间
划重点:Oozie Coordinator的调度逻辑是完全基于UTC时间计算的,所有你设置的本地时间最终都会转成UTC来执行,这是核心前提。
二、当前任务每日IST 22:00运行的对应逻辑
IST(印度标准时间)是UTC+5:30,所以IST的22:00转成UTC就是:22:00 - 5小时30分钟 = 16:30 UTC
你的Coordinator应该是把这个16:30 UTC作为每日的触发时间,而2018-03-26T14:08Z是任务的起始基准时间(第一次运行会在这个时间之后的第一个调度点触发)。
三、调整为每日IST 16:00运行的具体步骤
首先把IST 16:00转成UTC:16:00 - 5小时30分钟 = 10:30 UTC
接下来分两种场景操作:
场景1:修改已提交运行的Coordinator任务
如果任务已经在跑了,需要先暂停再更新配置:
暂停任务:
oozie job -pause <你的Coordinator任务ID>找到你的Coordinator XML配置文件,调整调度相关参数:
如果你用的是frequency参数(按分钟间隔调度),修改成这样:<coordinator-app name="你的任务名称" frequency="1440" start="2018-03-26T10:30Z" end="2099-12-31T23:59Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.4"> <!-- 其他任务配置(比如dataset、action等)保持不变 --> </coordinator-app>frequency="1440":代表每隔1440分钟(24小时)运行一次,也就是每日调度start:设置为转换后的UTC时间2018-03-26T10:30Z(如果要当天生效,确保这个时间在当前时间之前)timezone必须设为UTC,Oozie不认本地时区,必须统一用UTC
要是你习惯用cron表达式,UTC每日10:30的cron写法是:
<frequency>0 30 10 * * ?</frequency>(cron格式:秒 分 时 日 月 周 年,这里指定每天10点30分0秒触发)
更新任务配置:
oozie job -config <更新后的配置文件路径> -update <你的Coordinator任务ID>重启任务:
oozie job -resume <你的Coordinator任务ID>
场景2:新提交Coordinator任务
如果是新任务,直接把上面的配置写进Coordinator XML,然后提交即可:
oozie job -run -config <你的配置文件路径>
验证调整是否正确
修改完后,可以用命令行查看任务的下一次调度时间,确认是否符合预期:
oozie job -info <你的Coordinator任务ID>
输出里的Next Materialization Time会显示UTC时间,转成IST应该就是16:00,这样就没问题了。
内容的提问来源于stack exchange,提问作者user1720827

