crontab是linux系统下,用于设置周期性被执行的指令
一 基本格式
0 0 L * * *
说明:
Linux
* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)
二 场景1:如果两个定时间隔时间内,脚本没有执行,下一个脚本会启动,怎么办?
这种情况要分情况讨论:
1 数据幂等的,如同队列消息消费一样,允许重复消费
2 数据非幂等的,控制下一次定时执行的启动(即当前脚本执行结束后,在下一个定时点启动下一次脚本),方案很多,redis记录标记,zookeeper注册一个临时节点等,都可以实现
三 场景2:机器负载过高,导致zookeeper临时节点不释放,怎么办?
方案1,修改代码,更改临时节点名称,在其他机器上重新部署执行
方案2,zookeeper cli下删除临时节点,在其他机器上执行脚本
四 场景3:假如我想停掉故障机器,不做其他操作脚本如何正常执行呢?
脚本多机器部署
五 场景4:多机器部署,假如脚本每隔一分钟执行一次,且保证一分钟未执行完其他机器不能执行脚本,怎么办?
每台机器轮流执行,并借助zookeeper的临时节点,当一个机器一分钟内未执行完,其他机器执行时会因临时节点存在,而获取不到权限,无法执行脚本(此时可以预警)
2-59/3 * * * * command
1-58/3 * * * * command
0-57/3 * * * * command