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

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

crontab -e
* * * * * /something/bashfile
sarie
2019-03-13 09:24:41 +08:00
@xfspace 厉害了
zhangxiaodao
2019-03-13 09:56:08 +08:00
你都会设置 30 秒了,50 秒为啥不能设置?
MajorAdam
2019-03-13 10:05:37 +08:00
之前试过用 cron 表达式应该是不行的
hanbaobao2005
2019-03-13 10:42:57 +08:00
试一下
*/50 * * * * *
是不是可行
hayi
2019-03-13 10:48:14 +08:00
@hanbaobao2005 这肯定不行,60 秒一个周期,30 秒内的都可以这样。大于的就不行
Patrick95
2019-03-13 11:03:29 +08:00
* * * * * /bin/bash -l -c "/path/to/executable; sleep 50 ; /path/to/executable"
horek
2019-03-13 11:30:14 +08:00
@hayi 我也觉得大于 30 秒的都不行
glasslion
2019-03-13 11:42:34 +08:00
@hayi
@horek

cron 表达式 */n 的含义是,当秒数 /分钟数...能被 n 整除时执行, 而不是每 n 分钟执行.
zhfish
2019-03-13 11:52:50 +08:00
https://crontab.guru
最少是 1 分钟
hugee
2019-03-13 12:20:29 +08:00
@xfspace
@Patrick95 你两这个不仍然 1 分钟一次?


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

lz 说的是每 50 秒一次吧?@horek
radc
2019-03-13 12:25:19 +08:00
其实搭配 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-03-13 12:43:37 +08:00
这种需求可以直接考虑 supervise+py 来弄,逻辑简单清晰易于维护更新
具体逻辑用 py 实现,supervise 负责保证 py 进程不退出
fuergaosi
2019-03-13 12:47:28 +08:00
@seeusoon supervise 现在应该还是不支持 py3 吧
xuboying
2019-03-13 12:49:03 +08:00
这是不是一个 A->B 问题?
sfqtsh
2019-03-13 12:49:59 +08:00
用 at 命令
LoliconInside
2019-03-13 12:53:23 +08:00
While True:
time.sleep 50
reus
2019-03-13 12:56:57 +08:00
有 systemd 的 timer 不用,非要用过时的 crond ?
7654
2019-03-13 12:57:18 +08:00
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