[疑问]如何使用 cron 让脚本每 7 分钟执行一次?

2024-05-30 16:47:00 +08:00
 wuyadaxian
我的环境是 Ubuntu 22.04LTS 。
要求是从现在或者某个时间点开始,每 7 分钟执行一次 test.sh 脚本。
只能使用 crontab 来编写。
只是讨论,真正实现的时候肯定用 bash 或者其他语言脚本更方便实现。
18952 次点击
所在节点    程序员
162 条回复
darkengine
2024-05-31 12:54:23 +08:00
sh 不能修改。
------

自己写个脚本把这个 sh 包起来,新脚本每分钟跑一次,然后判断是否过了 7 分钟,是就调用这个目标 sh 就好了
wuyadaxian
2024-05-31 12:59:36 +08:00
我们现在拥有了两种解法
一种穷举法,见#22 ,#32 ,#33 ,#34 ,#113
一种复杂的 command 法,见#39 ,#40 ,#45 ,#51 ,#68 ,#96 ,#119
-----------------------------
穷举法:
#周一
0-56/7 0-21/7 * * 1 command
3-59/7 1-22/7 * * 1 command
6-55/7 2-23/7 * * 1 command
2-58/7 3-17/7 * * 1 command
5-54/7 4-18/7 * * 1 command
1-57/7 5-29/7 * * 1 command
4-53/7 6-20/7 * * 1 command
#周二
2-58/7 0-21/7 * * 2 command
5-54/7 1-22/7 * * 2 command
1-57/7 2-23/7 * * 2 command
4-53/7 3-17/7 * * 2 command
0-56/7 4-18/7 * * 2 command
3-59/7 5-29/7 * * 2 command
6-55/7 6-20/7 * * 2 command
#周三
4-53/7 0-21/7 * * 3 command
0-56/7 1-22/7 * * 3 command
3-59/7 2-23/7 * * 3 command
6-55/7 3-17/7 * * 3 command
2-58/7 4-18/7 * * 3 command
5-54/7 5-29/7 * * 3 command
1-57/7 6-20/7 * * 3 command
#周四
6-55/7 0-21/7 * * 4 command
2-58/7 1-22/7 * * 4 command
5-54/7 2-23/7 * * 4 command
1-57/7 3-17/7 * * 4 command
4-53/7 4-18/7 * * 4 command
0-56/7 5-29/7 * * 4 command
3-59/7 6-20/7 * * 4 command
#周五
1-57/7 0-21/7 * * 5 command
4-53/7 1-22/7 * * 5 command
0-56/7 2-23/7 * * 5 command
3-59/7 3-17/7 * * 5 command
6-55/7 4-18/7 * * 5 command
2-58/7 5-29/7 * * 5 command
5-54/7 6-20/7 * * 5 command
#周六
3-59/7 0-21/7 * * 6 command
6-55/7 1-22/7 * * 6 command
2-58/7 2-23/7 * * 6 command
5-54/7 3-17/7 * * 6 command
1-57/7 4-18/7 * * 6 command
4-53/7 5-29/7 * * 6 command
0-56/7 6-20/7 * * 6 command
#周日
5-54/7 0-21/7 * * 7 command
1-57/7 1-22/7 * * 7 command
4-53/7 2-23/7 * * 7 command
0-56/7 3-17/7 * * 7 command
3-59/7 4-18/7 * * 7 command
6-55/7 5-29/7 * * 7 command
2-58/7 6-20/7 * * 7 command
-----------------------------
复杂 command 法:
* * * * * [ $(($(date +\%s) / 60 \% 7 )) -eq 0 ] && ( command )
awalkingman
2024-05-31 13:28:43 +08:00
@hackerwgf #99 是吧,这个帖子氛围真好
Felldeadbird
2024-05-31 13:37:30 +08:00
啊,涨知识了。cron 原来不被整除就 跑不了啊。我系统好多这样的设置。
rb6221
2024-05-31 13:41:28 +08:00
你在 sh 外面再包一层 sh 然后里面判断时间就行了吧
banyasmya23
2024-05-31 13:45:40 +08:00
@bthulu #15 那用啥
msg7086
2024-05-31 13:55:13 +08:00
cron 只能穷举,systemd-timer 让 AI 生成两个文件往服务器里一塞,一分钟搞定。
xqzr
2024-05-31 13:58:47 +08:00
@Livid #22 Ai
LXGMAX
2024-05-31 15:28:12 +08:00
while
do
if now - last > 7 * 60:
run
done

/doge
D33109
2024-05-31 15:38:28 +08:00
每分钟执行一次 bash 脚本+ sleep 420,或者使用 at 命令

```
now=$(date +%s)
next_run=$(($now + 420))
at -f /path/to/your/script.sh $(date -r $next_run +%H:%M)
```
gule10
2024-05-31 15:42:57 +08:00
0,7,14,21,28,35,42,49,56 0,8,15,22 * * * command
3,10,17,24,31,38,45,52,59 1,9,16,23 * * * command
6,13,20,27,34,41,48,55 2,10,17,24 * * * command
2,9,16,23,30,37,44,51,58 4,11,18 * * * command
5,12,19,26,33,40,47,54 5,12,19 * * * command
1,8,15,22,29,36,43,50,57 6,13,20 * * * command
4,11,18,25,32,39,45,53 7,14,21 * * * command
nomytwins
2024-05-31 15:48:34 +08:00
*/7
每小时的 0 分、7 分、14 分、21 分、28 分、35 分、42 分、49 分、56 分
realpg
2024-05-31 15:54:51 +08:00
cron + at
已运行超过 6 年 无差错 无漏执行
wanqingfengtao
2024-05-31 16:24:40 +08:00
歪个楼,OP 考虑这么多,考虑闰秒了吗?🤪
wuyadaxian
2024-05-31 16:34:44 +08:00
@wanqingfengtao 哈哈哈。没有。
全部交给 NTP 。
yankebupt
2024-05-31 19:04:04 +08:00
@wuyadaxian 还真的,小时也可以用除 7 偏移量,只想到分钟可以,脑子瓦特了
guanzhangzhang
2024-05-31 19:08:33 +08:00
@lolizeppelin #47 +1 ,看了 40 多层,才看到有人提 systemd 的 timer
yankebupt
2024-05-31 19:12:28 +08:00
@wuyadaxian 对了问个问题
比如周三这条
3-59/7 2-23/7 * * 3 command
不加-23 或者-59 会怎样?会超过 60 分钟或 24 小时么?
sampeng
2024-05-31 19:24:30 +08:00
其实如果是我…我会改成 6 分钟或者 5 分钟。然后去怼提出这个需求的人。
jevonszmx
2024-05-31 22:50:21 +08:00
我一般是每分钟执行,然后代码里面控制真正的逻辑

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

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

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

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

© 2021 V2EX