可以使用**redisson分布式锁** 来保证只有一个后端服务在运行该脚本任务,由于其创建的分布式锁是有过期时间(默认30秒)的且有锁续期机制(默认每隔10秒续期),所以尽管当执行脚本任务的服务崩溃,锁也会在一定时间之后过期,另一个服务则可以拿到锁执行任务。 用分布式锁的**存在与否** 来判断当前脚本任务状态,锁存在表示脚本任务正在执行,反之则不在执行(`当然如果服务崩溃后,锁没有被及时释放,这里会存在一定的延迟,可以通过调整锁的默认过期时间来缩短延迟时间`)。 大致流程: 1. 服务拿到分布式锁,启动任务(客户端通过锁是否存在来判断任务状态) 2. 任务执行中 3. 任务执行完成,释放锁