crontab 能否实现每 50 秒执行一次定时任务

2019 年 3 月 13 日
 horek
我有一个需要定时 50 秒执行一次任务的需求,想了半天,只能实现每 10 秒执行一次、30 秒执行一次,就是不知道 50 秒执行一次能不能设置,求指教
11601 次点击
所在节点    Linux
41 条回复
ysc3839
2019 年 3 月 13 日
大概不行。可以设置成 10 秒执行一次,然后记录一下执行次数,到 5 了才实际执行代码。
xfspace
2019 年 3 月 13 日
#!/usr/bin/env bash
sleep 50
balabala

crontab -e
* * * * * /something/bashfile
sarie
2019 年 3 月 13 日
@xfspace 厉害了
zhangxiaodao
2019 年 3 月 13 日
你都会设置 30 秒了,50 秒为啥不能设置?
MajorAdam
2019 年 3 月 13 日
之前试过用 cron 表达式应该是不行的
hanbaobao2005
2019 年 3 月 13 日
试一下
*/50 * * * * *
是不是可行
hayi
2019 年 3 月 13 日
@hanbaobao2005 这肯定不行,60 秒一个周期,30 秒内的都可以这样。大于的就不行
Patrick95
2019 年 3 月 13 日
* * * * * /bin/bash -l -c "/path/to/executable; sleep 50 ; /path/to/executable"
horek
2019 年 3 月 13 日
@hayi 我也觉得大于 30 秒的都不行
glasslion
2019 年 3 月 13 日
@hayi
@horek

cron 表达式 */n 的含义是,当秒数 /分钟数...能被 n 整除时执行, 而不是每 n 分钟执行.
zhfish
2019 年 3 月 13 日
https://crontab.guru
最少是 1 分钟
hugee
2019 年 3 月 13 日
@xfspace
@Patrick95 你两这个不仍然 1 分钟一次?


@hanbaobao2005 你这个不是 50 分钟才一次?

lz 说的是每 50 秒一次吧?@horek
radc
2019 年 3 月 13 日
其实搭配 sleep 是可以实现任意秒数间隔的 就是蛋疼了一点
比如想要 10s 间隔,那就取个分钟整数,做 sleep 10/20/30/40/50/60 6 个 cronjob (*/1 * * * *)
要 30s 间隔,就 sleep 30/60,两个 cronjob, (*/1 * * * *)

比如楼主想要 50s,那就取整到 300s,弄这么几个....... 每 300 秒装填 6 个任务,分别以 50 秒间隔来执行。
```
*/5 * * * * (sleep 50; echo `date` >> /tmp/50s.log)
*/5 * * * * (sleep 100; echo `date` >> /tmp/50s.log)
*/5 * * * * (sleep 150; echo `date` >> /tmp/50s.log)
*/5 * * * * (sleep 200; echo `date` >> /tmp/50s.log)
*/5 * * * * (sleep 250; echo `date` >> /tmp/50s.log)
*/5 * * * * (sleep 300; echo `date` >> /tmp/50s.log)
```
测试输出是这样,符合预期 挺 2b 的方法.... but it works! 😂
```
Wed Mar 13 12:15:51 CST 2019
Wed Mar 13 12:16:41 CST 2019
Wed Mar 13 12:17:31 CST 2019
Wed Mar 13 12:18:21 CST 2019
Wed Mar 13 12:19:11 CST 2019
Wed Mar 13 12:20:01 CST 2019
Wed Mar 13 12:20:52 CST 2019
Wed Mar 13 12:21:42 CST 2019
Wed Mar 13 12:22:32 CST 2019
```
seeusoon
2019 年 3 月 13 日
这种需求可以直接考虑 supervise+py 来弄,逻辑简单清晰易于维护更新
具体逻辑用 py 实现,supervise 负责保证 py 进程不退出
fuergaosi
2019 年 3 月 13 日
@seeusoon supervise 现在应该还是不支持 py3 吧
xuboying
2019 年 3 月 13 日
这是不是一个 A->B 问题?
sfqtsh
2019 年 3 月 13 日
用 at 命令
LoliconInside
2019 年 3 月 13 日
While True:
time.sleep 50
reus
2019 年 3 月 13 日
有 systemd 的 timer 不用,非要用过时的 crond ?
7654
2019 年 3 月 13 日
while [ 1 ]
do
sleep 50
done &

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

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

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

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

© 2021 V2EX