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

2024-05-30 16:47:00 +08:00
 wuyadaxian
我的环境是 Ubuntu 22.04LTS 。
要求是从现在或者某个时间点开始,每 7 分钟执行一次 test.sh 脚本。
只能使用 crontab 来编写。
只是讨论,真正实现的时候肯定用 bash 或者其他语言脚本更方便实现。
18935 次点击
所在节点    程序员
162 条回复
wuyadaxian
2024-05-30 18:44:32 +08:00
@brant2ai 要操作外部脚本啊,那就不在讨论范围了。都能用外部脚本了,方法就多了,楼上很多。
dapang1221
2024-05-30 18:44:34 +08:00
Thu May 30 17:07:00 CST 2024
Thu May 30 17:14:00 CST 2024
Thu May 30 17:21:00 CST 2024
Thu May 30 17:28:00 CST 2024
Thu May 30 17:35:00 CST 2024
Thu May 30 17:42:00 CST 2024
Thu May 30 17:49:01 CST 2024
Thu May 30 17:56:00 CST 2024
Thu May 30 18:00:00 CST 2024
Thu May 30 18:07:00 CST 2024
Thu May 30 18:14:00 CST 2024
Thu May 30 18:21:00 CST 2024
Thu May 30 18:28:00 CST 2024
Thu May 30 18:35:00 CST 2024
Thu May 30 18:42:00 CST 2024

实测只用 */7 * * * * 确实不行 - - @skyrim61 @suyuyu
foursking
2024-05-30 18:56:28 +08:00
*/7 不行,如果一定要实现间隔,貌似只能 外部引入一个 sleep_7_minutes.sh 实现
brant2ai
2024-05-30 18:59:12 +08:00
@wuyadaxian #61
$schedule->command('b2buhrenApi:productSync')
->when(intval(time()/60) % 7 ==0);
这个是老外的回答,你试试
https://laracasts.com/discuss/channels/laravel/how-to-run-schedule-every-7-minutes?page=1&replyId=821790
RRRoger
2024-05-30 19:00:06 +08:00
最小公倍数原理
brant2ai
2024-05-30 19:03:30 +08:00
@wuyadaxian #61 又找了一个
[[ $(($(date +'%s / 60 % 7 '))) -eq 0 ]] &&
wuyadaxian
2024-05-30 19:03:41 +08:00
@brant2ai 我试试
brant2ai
2024-05-30 19:05:09 +08:00
@wuyadaxian #61 * * * * * [[ $(($(date +'%s / 60 % 7 '))) -eq 0 ]] && command 前面的这个并上你的命令,每分钟做判断,如果是就执行
aa51513
2024-05-30 19:06:35 +08:00
@RedisMasterNode 写文件,把上次运行的时间写到文件里,我看很多程序就把自身运行的 pid 写到文件里,很常规的操作吧
wuyadaxian
2024-05-30 19:06:37 +08:00
@brant2ai bash: syntax error near unexpected token `(' 是我的环境问题吗
wuyadaxian
2024-05-30 19:08:21 +08:00
@brant2ai 你可以看看 45 楼和 51 楼,我不确定是不是我环境或者什么问题,在 ubuntu 下无法执行。
brant2ai
2024-05-30 19:09:50 +08:00
@wuyadaxian #70 减掉一层括号试试
wuyadaxian
2024-05-30 19:10:29 +08:00
@brant2ai 另外这个算没用 cron 了吧。
RedisMasterNode
2024-05-30 19:10:31 +08:00
@aa51513 要能这么玩我估计不会有本帖 hhh
vipfts
2024-05-30 19:11:16 +08:00
@wuyadaxian #34 学到了
mohumohu
2024-05-30 19:14:33 +08:00
* * * * * source /etc/profile && ( [ -f /tmp/timestamp ] || date +\%s > /tmp/timestamp ) && [ $(( $(date +\%s) - $(cat /tmp/timestamp) )) -ge 10 ] && ( echo 2 && date +\%s > /tmp/timestamp )
brant2ai
2024-05-30 19:15:13 +08:00
@wuyadaxian #73
@wuyadaxian #70 我在服务器上测试是可以的
[[ $(($(date +'%s / 60 % 7 '))) -eq 0 ]] && echo hello 。另外这个是目前最简单的不用引用外部的做法
wuyadaxian
2024-05-30 19:16:15 +08:00
@brant2ai 同样,在 cron 里面* * * * * [[ $(($(date +'%s / 60 % 7 '))) -eq 0 ]] && command 。 [无法运行] ------在 tty 内,[[ $(($(date +'%s / 60 % 7 '))) -eq 0 ]] && command 。 [正常运行]
wuyadaxian
2024-05-30 19:17:03 +08:00
@brant2ai 我也可以直接在 tty 中使用这行 command ,但是 cron 里面不会运行
brant2ai
2024-05-30 19:23:59 +08:00
@wuyadaxian #79 你检查下 crontab 是不是写对的

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

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

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

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

© 2021 V2EX