![]() | 1 MrUser 2019-12-24 16:42:17 +08:00 每 5 分种执行一次 A 脚本,在 A 脚本里判断是不是第 65N 次。 |
2 lihongjie0209 2019-12-24 16:43:05 +08:00 每分钟执行一次, 判断和上次执行时间是否超过 65min(每次执行需要写入执行时间) |
![]() | 3 victor 2019-12-24 16:44:34 +08:00 */5 */1 * * * |
![]() | 4 geekvcn 2019-12-24 16:45:35 +08:00 用 shell 比较方便,crontab 每小时会重置计时 |
![]() | 6 yoshiyuki 2019-12-24 16:47:05 +08:00 没有特别好的写法,cron 本身不支持每 65 分钟这种语法 真要特别精准的话,需要一个个时间点写下来,00:00、01:05、etc 这样 |
![]() | 7 feigle 2019-12-24 16:54:00 +08:00 ![]() 还有个笨办法,把脚本复制 12 份,每一份每天执行两次,每份之间间隔 65 分钟 |
![]() | 8 shengchao OP 好吧 得到结论,crontab 真的挫 |
![]() | 9 FS1P7dJz 2019-12-24 16:56:09 +08:00 ![]() 技术上的实现如果扭曲 最好先反思一下业务上逻辑是不是存在问题... 65 分钟这种奇怪的要求,往往不应该让系统去做,应该是开发那边做 |
10 sqdxxx 2019-12-24 17:00:10 +08:00 sleep(65*60) |
![]() | 12 zbl430 2019-12-24 17:20:14 +08:00 http://qqe2.com/cron 这个可以测试,但是无法应该实现 |
![]() | 14 maichael 2019-12-24 17:31:41 +08:00 弄个每小时执行一次的,然后脚本里面先睡 5 分钟。 |
![]() | 15 b821025551b 2019-12-24 17:35:45 +08:00 |
![]() | 16 b821025551b 2019-12-24 17:36:32 +08:00 @maichael #14 那也还是每 60 分钟一次,而不是 65 |
![]() | 19 caryqy 2019-12-24 17:41:02 +08:00 5 */1 * * * a++ if a%2 == 1 then run ... fi |
![]() | 20 caryqy 2019-12-24 17:43:50 +08:00 缺点 需要额外的一个文件保存计数值 |
![]() | 21 caryqy 2019-12-24 17:47:36 +08:00 不对,我的方法错的 |
![]() | 23 JJstyle 2019-12-24 17:49:52 +08:00 via iPhone 1/65 * * * *,难道不是这个吗? |
![]() | 24 momocraft 2019-12-24 17:51:32 +08:00 一本生成 100 次隔 65 分的 crontab 然後用 cron 行 |
![]() | 25 300 2019-12-24 17:51:37 +08:00 via Android 每次自动添加一个 65 分钟后的时间的任务? |
26 luban 2019-12-24 17:52:07 +08:00 执行间隔变短,额外的存储控制执行时间 |
27 kilen3a 2019-12-24 17:58:18 +08:00 crontab 建一个只执行一次的脚本,然后等脚本执行完之后计算 65 分钟后的时间,并修改成对应时间,done ! |
![]() | 28 eason1874 2019-12-24 18:01:30 +08:00 我实现过类似的需求,写一个 sh 文件,在 crontab 每分钟运行。 然后 sh 文件的代码就是:一个开始时间戳常量,运行的时候,先计算这个时间戳距离当前的分钟数,然后拿这个分钟数去除以 65,如果能被整除说明隔了 65 分钟,那就运行,不能整除就结束,等下一分钟。 |
![]() | 29 dosmlp 2019-12-24 18:02:44 +08:00 直接的没有,楼里看很多人提出了许多间接的方法应该可以 |
30 KENNHI 2019-12-24 18:03:51 +08:00 via Android ![]() ?就没有一个人能想起 systemd 吗 https://wiki.archlinux.org/index.php/Systemd/Timers_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 我现在连网络都是用 systemd 配置的,systemd 可不只是 init |
32 mahogany 2019-12-24 18:15:08 +08:00 ![]() cron */n 指的是分钟数...能被 n 整除时执行,不是每 n 次执行。 为什么非要是 65 分钟,感觉代码不应该依赖这么奇怪的时间 interval。 |
![]() | 33 DGideas 2019-12-24 18:25:38 +08:00 via Android 写个 shell 循环,然后每次循环先睡 65 分钟,如何? |
34 superrichman 2019-12-24 18:28:59 +08:00 via iPhone crontab 不好做,建议用 python 的 apscheduler 可以随便定义 interval |
![]() | 35 lululau 2019-12-24 18:30:30 +08:00 30 楼正解,用 systemd/times 替代 cron |
![]() | systemd.timer |
38 zealot0630 2019-12-24 19:52:14 +08:00 via Android 9102 年了,用 systemd-timer 了,crond 过时了 |
39 hq136234303 2019-12-24 22:46:29 +08:00 保持一个 date,每五分钟执行,然后当 65 分钟就执行代码清除,循环即可。 |
40 hq136234303 2019-12-24 22:46:45 +08:00 保持一个 date,每五分钟执行,然后当 65 分钟就执行代码。清除时间,循环即可。 |
![]() | 41 SenLief 2019-12-24 22:53:14 +08:00 systemd.timer 搞定,很简单的。65min |
![]() | 42 holinhot 2019-12-24 23:34:23 +08:00 自己写个定时器 |
![]() | 43 fx 2019-12-24 23:46:30 +08:00 自己写个定时器 + 1 |
44 sx90 2019-12-25 00:13:35 +08:00 via Android 哦,就延时 65 分钟,非每隔 65 分钟循环执行 crontab 也可以,让脚本自定义 启动脚本 #!/bin/sh time1 = $(date -d "65 minute" +"%-M %-H") crontab -l > confback crontab -l > conf && echo " ${time1} * * * XXXXXXXX.sh >> /tmp/tmp.txt" >> conf && crontab conf && rm -f conf 执行脚本 #!/bin/sh 你自己的代码 crontab confback && rm -f confback 推荐 30 楼大佬的方法,本人萌新,能闷一个是一个,错了别打脸 |
45 cht 2019-12-25 01:53:28 +08:00 个人用 shell + at,最初是应对一些签到网站需要 24 小时 01 分钟或 25 小时后才能重签的问题写的 |
![]() | 46 dangyuluo 2019-12-25 01:57:36 +08:00 用一些 python 定时库来做,cron 在这种情况下有点不足 |
![]() | 47 loading 2019-12-25 02:44:13 +08:00 via Android ![]() crontab 底层实现不也是每次判断一下? 写个 5 分钟的 shell 就行了,分钟数 65 求个余数。 |
![]() | 48 ashong 2019-12-25 02:53:04 +08:00 via iPhone ![]() 定义多个 task 0 0 0 0 5 1 0 10 2 ... 13 小时一个周期 |
![]() | 49 ashong 2019-12-25 03:03:39 +08:00 via iPhone 另一种就是 13 分钟执行一次,脚本检查计数,5 次执行一次真正的代码计数归零 |
50 trafficMGR 2019-12-25 08:28:47 +08:00 via Android */65 * * * * 没有了 |
![]() | 51 guanhui07 2019-12-25 08:29:02 +08:00 timer |
![]() | 52 2379920898 2019-12-25 08:58:15 +08:00 这就比较 LOW 了 |
![]() | 53 xypty 2019-12-25 09:02:24 +08:00 @trafficMGR 最大 59 的 |
54 geying 2019-12-25 09:10:48 +08:00 好奇什么场景 |
![]() | 55 SjwNo1 2019-12-25 09:13:06 +08:00 @trafficMGR interval 最大 60 建议换 timer |
![]() | 56 palmers 2019-12-25 09:16:09 +08:00 可不可以 13 分钟执行一次, 然后计数到 5 |
![]() | 57 dog82 2019-12-25 09:20:44 +08:00 定义 5 分钟一次的 crontab,mod 65 = 0 时执行即可 |
58 raysonlu 2019-12-25 09:58:30 +08:00 我很好奇大家都没有每秒执行的场景吗?用 sleep 不就完事了么,一样的逻辑啊。 0 * * * * sleep 300; 要执行的命令 意思是每小时执行一次,执行前先睡个 300 秒 |
![]() | 59 wmwmajie 2019-12-25 09:58:59 +08:00 你设置为 60 分钟一次,然后程序里面休眠 5 分钟不就行了。 |
![]() | 61 zyq2280539 2019-12-25 10:17:59 +08:00 这个简单啊,写个 shell 放到 crontab 里每天执行一次,然后 shell 里写上代码循环多少次,执行完毕就 sleep 65 分钟,差不多能基本满足需求吧 |
62 cuixiao603 2019-12-25 10:23:03 +08:00 * * * * * sleep 3900;command |
![]() | 63 oeagut 2019-12-25 10:28:51 +08:00 via iPhone date 获取 1970 那个日期到现在的秒数,然后对 65*60 这个数取余,如果余数为 0,执行你的东西 然后把上面的写到 crond 里,每分钟执行一下,逻辑没错吧。 |
![]() | 64 cnbattle 2019-12-25 10:29:58 +08:00 最后结论 代码层处理.. |
![]() | 66 zhoudaiyu PRO sleep 大法好 |
![]() | 67 Felldeadbird 2019-12-25 11:52:46 +08:00 cron 每分钟执行,然后业务逻辑进行时间判断。 睡眠固然是好,但要是中途因为突发内存占用问题,进程被清空了,不就凉凉 |
![]() | 68 ShundL 2019-12-25 12:07:12 +08:00 @cuixiao603 #62 你这个不是成了每分钟执行了? |
![]() | 69 tinybaby365 2019-12-25 12:32:45 +08:00 via iPhone at 命令了解一下 |
70 cuixiao603 2019-12-25 14:03:47 +08:00 @ShundL #68 不会啊 3900 秒是 65 分钟啊 |
![]() | 71 ShundL 2019-12-25 15:41:42 +08:00 @cuixiao603 #70 但 cron 每分钟执行,也就每分钟都创建一个 sleep 65 分钟的任务,每次任务的最终执行时间应该只相差 1 秒吧? |
72 ryanlid 2019-12-25 15:55:17 +08:00 @cuixiao603 #70 细品一下,从第 65 分钟开始,就变成每分钟执行了 |
![]() | 73 dier 2019-12-25 16:02:50 +08:00 at 命令了解一下 |
![]() | 74 InternetExplorer 2019-12-25 16:08:16 +08:00 via Android systemd.timer 了解一下,现在的系统应该都是 systemd 的了 |
75 james122333 2019-12-25 16:25:20 +08:00 shell 强多了 被低估的工具 主要还是太多人写太差了 |
76 james122333 2019-12-25 16:26:23 +08:00 crontab 的功能完全可以用 shell 实现 |
![]() | 77 wmwmajie 2019-12-25 16:34:01 +08:00 @shengchao 你的描述是 65 分钟执行一次。 那么我在 crontab 里面加入一个 60 分钟执行一次的任务,然后在任务的代码里面先休眠 5 分钟。 这难道不是 65 分钟执行一次? 如果你是要从 crontab 任务写入的时候开始算 65 分钟执行,那么你就在 0 分的时候修改 crontab,这样每次执行都是 65 分钟后。 |
![]() | 78 aliao0019 2019-12-25 16:34:22 +08:00 写一个每 13 个小时跑一次的 cron task,在这个脚本里每隔 65 分钟跑一次,一共跑 12 次 |
![]() | 81 omph 2019-12-25 16:48:29 +08:00 最好用 systemd,否则用 1 楼思路 [自更新 shell 脚本]( https://my.oschina.net/u/1044667/blog/1622308) |
82 krixaar 2019-12-25 16:53:58 +08:00 @wmwmajie 第一次运行是第 60 分钟的时候,延迟 5 分钟,第 65 分钟执行,第二次运行是第 120 分钟的时候,延迟 5 分钟,第 125 分钟执行,125-65=60,间隔是 60 分钟而不是 65 分钟。 |
![]() | 83 cattyhouse 2019-12-25 21:21:07 +08:00 0 0 * * * command # 0 点 0 分执行第一次 5 1,12,23 * * * command # 1,12.23 点 5 分执行第二次 10 2,13 * * * command # 2,13 点 10 分执行第三次 15 3,14 * * * 20 4,15 * * * 25 5,16 * * * 30 6,17 * * * 35 7,18 * * * 40 8,19 * * * 45 9,20 * * * 50 10,21 * * * 55 11,22 * * * |
![]() | 84 cattyhouse 2019-12-25 21:35:47 +08:00 更正 0 0,12 * * * /path/to/command 5 1,13 * * * 10 2,14 * * * 15 3,15 * * * 20 4,16 * * * 25 5,17 * * * 30 6,18 * * * 35 7,19 * * * 40 8,20 * * * 45 9,21 * * * 50 10,22 * * * 55 11,23 * * * |
![]() | 85 cattyhouse 2019-12-25 21:42:00 +08:00 或者最简单就是 while true 大法 代码如下: #!/bin/bash while true ; do your code here # 呼叫 sleep 65m = 3900 秒 sleep 3900 done |
![]() | 86 metamask 2019-12-25 22:11:16 +08:00 |
87 tankren 2019-12-25 22:32:31 +08:00 https://crontab.guru/ |