如何让任务每 a-b 分钟执行一次脚本

2020-09-15 14:17:36 +08:00
 xiaohantx

*/8 * * * * /bin/sh /www/wwwroot/xxxx.com/crontab.sh

目前是 8 分钟一次

rand_num=$(($RANDOM%300+60))

declare -i i=1;

while ((i<rand_num))
do
	sleep 1
	let i++
done

php /www/wwwroot/xxx.com/run.php

每 8 分钟把任务提出来一次然后再延迟 1-5 分钟,但是这样就会出现两个任务在跑的情况。。。想单任务但是时间在 a-b 间任意

3733 次点击
所在节点    Linux
34 条回复
xiaohantx
2020-09-15 17:04:20 +08:00
@dier emmm 那还是是会有个睡眠时间的增加吧。。类似于延迟,没办法稍微精准点控制,比如我想 3-8 分钟运行一次,没办法稍微精准点控制在范围内吗
xiaohantx
2020-09-15 17:05:32 +08:00
@suke971219 宝塔的定时任务试固定的
knightdf
2020-09-15 17:32:52 +08:00
@xiaohantx 你自己先把需求描述清楚吧
mikurasa
2020-09-15 17:37:14 +08:00
可以基于 cron 表达式+随机时间因子 和锁自己手写一个调度
dier
2020-09-15 17:42:07 +08:00
@xiaohantx 你要求的就不是一个精确时间,怎么精准控制呢?要么 3 分钟,要么 8 分钟,你得确定执行间隔时间呀
dier
2020-09-15 17:53:09 +08:00
想到了一个办法,不用睡眠等待,手动把定时任务写到 /etc/crontab 文件中,然后在你的脚本最后加上一段替换脚本,执行完脚本去更新这个文件中的间隔时间
chogath
2020-09-15 20:35:54 +08:00
短时间执行的可不可以考虑使用 延时队列呢? Redis 或者 MQ
MagicalE
2020-09-15 21:23:04 +08:00
是怕定时推送被检测嘛?
xiaohantx
2020-09-15 21:26:07 +08:00
@MagicalE 是的 app 抓包的
MagicalE
2020-09-15 23:12:59 +08:00
@xiaohantx 我最近也在做类似功能,一个比较简单的 selenium 定时回复程序,定时执行总是被系统删除。

windows 下只知道可以用计算机管理里面的基本任务来定时执行脚本,而那个基本任务的触发器必须指定具体时间,很头疼≡(▔﹏▔)≡
ety001
2020-09-15 23:39:19 +08:00
想要保证 crontab 单任务的话,可以试试 flock 给要执行的程序加锁。
ety001
2020-09-15 23:41:38 +08:00
随机时间放在 php 程序的开头,进入先 sleep 一个随机数,再执行。
jinhan13789991
2020-09-16 09:39:02 +08:00
简单,定时器执行任务脚本。脚本最后加上如下逻辑:删除定时器,再写入一个新的执行当前脚本的任务,执行时间是 a-b 分钟之后。
more1sec
2020-09-16 14:43:21 +08:00
python 的 adscheduler 可以指定一个 cron 同时只能有 1 个实例在跑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/707182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX