针对删除执行器的场景,需要使用该执行器的任务都不能处于运行中
也即 xxl_job.xxl_job_info的ttrigger_status都不能等于-1
1.记录旧ID并删除
--查询并记录下旧IP的执行器对应的iID,方便后续更新原任务的执行器ID为新的执行器
select id from xxl_job.xxl_job_group g where g.address_list like '%旧执行器IP:旧执行器端口%'
--数据库变更
update xxl_job.xxl_job_info i,xxl_job.xxl_job_group g on i.job_group=g.id
set i.trigger_status=0
where g.address_list like '%旧执行器IP:旧执行器端口%'
--或者在调度器的任务管理中将该执行器的对应任务改为停止状态
2.重新注册后,更新原任务中执行器ID
删除后重新加入的执行器,需要将 xxl_job_info
表的job_group更新为新的xxl_job_group表对应执行器的id,否则会导致任务管理为空
update xxl_job.xxl_job_info i,xxl_job.xxl_job_group g on i.job_group=g.id
set i.job_group=g.id
where g.address_list like '%新执行器IP:新执行器端口%'
and i.job_group="旧执行器对应group表的ID"
针对xxl_job部署的机器重启并且网络IP做了变更的情况,新启动的xxl_job再注册时实际上会读取主机名.
此时如果在/etc/hosts
文件中设置了旧IP 主机名
的映射,会导致新启动的执行器注册到调度器上的还是旧IP。
解决
#1.在root或者使用sudo执行:
vim /etc/hosts
#2.修改主机名指向新IP
#3. 刷新dns
service network restart
#4. 重启执行器,此时直接刷新调度器看不到最新结果(可重新登录调度器或者直接看xxl_job.xxl_job_registry)