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

263 天前
 wuyadaxian
我的环境是 Ubuntu 22.04LTS 。
要求是从现在或者某个时间点开始,每 7 分钟执行一次 test.sh 脚本。
只能使用 crontab 来编写。
只是讨论,真正实现的时候肯定用 bash 或者其他语言脚本更方便实现。
16460 次点击
所在节点    程序员
162 条回复
mohumohu
263 天前
@wuyadaxian 写绝对路径试试,/bin/date
pckillers
263 天前
cron 每分钟执行一次 sh 。 sh 里每次都判断特定文件夹里有几个文件。有 6 个文件时清空文件夹并执行实际代码。 不满 6 个文件时把当前 timestamp 作为文件名创建文件,不执行代码。

这样就能 7 分钟一次了
Richared
263 天前
定时每分钟执行,脚本里判断次数不就完了么。
lolizeppelin
263 天前
先说清楚,间隔从执行开始算起还是执行后算起

执行前算起的话,脚本执行超过 7 分钟如何处理
wuyadaxian
263 天前
@mohumohu 我尝试 * * * * * ((($(date +%s) / 60 % 7 == 0)) && /etc/test.sh) 并 [没有运行] 。我已经确认用户拥有 test.sh 的读写运行权限。另外我直接在 tty 里面输入((($(date +%s) / 60 % 7 == 0)) && /etc/test.sh)是 [可以运行] 的。
wuyadaxian
263 天前
@lolizeppelin 每隔 7 分钟,执行一次 test 脚本,不管 test 脚本之后的状态。
lolizeppelin
263 天前
Ubuntu 22.04 不是有 systemd 么,
timer

OnUnitActiveSec 搞定,用啥 cron
lrh3321
263 天前
该切到 systemd 的 timer 上了
yankebupt
263 天前
如楼主回复所言,day of the week 可以被 7 整除,所以穷举一下是可以的,可能也就一千多条吧,换上用 slash(/)的 initial value 优化下也有几百条,真的合适么……
wuyadaxian
263 天前
@yankebupt 见 33 ,34 楼,只需要 49 条,还可以设置偏移量。
wuyadaxian
263 天前
@mohumohu 我找到一篇文章,https://href.lu/15A 。此文章表示在 macOS 中成功使用了复杂的 command 。但是我在我现在的 linux ubuntu 下没有运行成功。不知道是不是哪里错了,比如需要用引号之类的。
brant2ai
263 天前
从每个小时的角度,每隔 7 分钟,就有 7 种开始时间。所以可以在每个小时开始时判断开始判断是那种,然后复写调度。
yinxs2003
263 天前
*/7

对吗,我猜的
brant2ai
263 天前
@brant2ai 比如 0 分钟开始,调度就是 0 ,07 ,14 ,21 ,28 ,35 ,42 ,49 ,56 ,以及下个小时的 03 。在 63 的时间点,判断是不是个位,如果是,则继续加到下一个小时,并覆盖 crontab
killva4624
263 天前
每 7 分钟一次,不能能用简单整除的方法,我想到的:
- 要么就穷举一次循环,把循环分钟记录下来作为判断;
- 要么就每次执行完写一次时间到文件,下次运行的时候从这个文件判断要不要是不是已间隔 7 分钟。
xuanbg
263 天前
cron 做不到,脚本内循环判断时间戳/60 后对 7 取余是否为 0 即可。但你要保证每次执行业务逻辑都能在 7 分钟内完成才行。
wuyadaxian
263 天前
@brant2ai 复写的时候是哪段代码或什么外部程序或者谁(真人)来进行。
brant2ai
263 天前
@wuyadaxian #57 你可以写到/etc/crontab 里,每次删除最后一条再把新的插入进去
brant2ai
263 天前
@wuyadaxian #57 就是你自己的这个脚本本身需要有权限去写。开权限就可以了
RedisMasterNode
263 天前
@xzh920126
> cron 每分钟执行一次 sh ,在 sh 里判断时间
就算能修改 sh 好像也不行呀,看上下文基本可以确认是个无状态的任务(那就假设它是吧),sh 里怎么知道上次执行是啥时候,隔了多久咧

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

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

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

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

© 2021 V2EX