技术请求:获取提取ID的正则表达式及每90秒执行的合法Cron表达式
一、提取ID的正则表达式
正则表达式需要根据你要匹配的具体字符串模式调整,以下是几种常见场景的实用示例:
- 如果ID是纯数字(如
user_12345、/api/item/6789):
用(\d+)捕获连续数字ID,比如匹配order-9876时,\d+会提取出9876。 - 如果ID包含字母、数字和下划线(如
abc_123_xyz):
用([a-zA-Z0-9_]+)适配通用标识符格式,捕获完整ID。 - 如果ID有固定前缀(如
ticket:TKT-4567):
用精准正则ticket:TKT-(\d+),直接提取前缀后的数字ID部分。
二、每90秒执行的Cron表达式解决方案
你遇到的错误是因为Cron表达式本身不支持嵌入sleep命令,sleep是Shell命令,不能写在Cron的时间字段里。根据不同Cron环境,解决方案如下:
1. Linux系统标准Cron(最小单位为分钟)
标准Cron没有秒级控制,无法直接通过表达式实现每90秒执行,推荐用Shell脚本循环实现:
#!/bin/bash # 循环执行任务,每次间隔90秒 while true; do # 替换为你的实际任务命令 echo "执行定时任务" sleep 90 done
将脚本保存为 task_loop.sh,赋予执行权限 chmod +x task_loop.sh,然后:
- 用
nohup ./task_loop.sh &让脚本后台运行(重启后需重新执行); - 或配置systemd服务实现开机自启,避免进程意外终止。
2. 支持秒级的Cron(如Quartz框架)
Quartz的Cron格式为 秒 分 时 日 月 周 年,由于秒的取值范围是0-59,无法直接写0/90,可通过两个表达式组合实现每90秒执行:
- 偶数分钟的0秒触发:
0 0,2,4,...,58 * * ? * - 奇数分钟的30秒触发:
30 1,3,5,...,59 * * ? *
两者配合会在0分0秒、1分30秒、3分0秒、4分30秒...依次触发,每次间隔恰好90秒。
内容的提问来源于stack exchange,提问作者Kiran Kadam
相关产品推荐
相关产品推荐

