是否可以抵消设置为每 5 分钟运行一次的 cron 脚本?
我有两个脚本,脚本 1 从一个数据库中收集一些数据并将其插入到另一个数据库中,脚本 2 提取这些数据和许多其他数据并从中创建一些漂亮的报告。这两个脚本都需要每 5 分钟运行一次。我想将脚本 2 偏移一分钟,以便它可以根据新数据创建报告。EG 我希望脚本一运行,:00, :05, :10, :15 [...]脚本二:01, :06, :11, :16 [...]每小时运行一次。脚本不相互依赖,无论脚本 1 是否成功,脚本 2 都必须运行。但是,如果报告可以包含最新数据,那将会很有用。这可以用 cron 实现吗?
邮政;
我曾想过在 shell 脚本中使用这两个命令,以便它们立即相互运行,但这不起作用,有时脚本 1 可能会因等待外部 API 等而挂断,因此可能需要长达 15 分钟才能运行,但是脚本 2 必须每 5 分钟运行一次,因此这样做会停止/延迟脚本 2 的执行。如果我可以在 Cron 中设置它,则意味着无论脚本 1 在做什么,脚本 2 都会运行
Cal*_*leb 49
crontab 的分钟输入字段接受一个“增量”运算符,这有点令人困惑,因为它看起来应该是一个数学“除以”运算符,但实际上不是。您将最常看到它使用如下所示的内容。请注意,这不会找到可以被 5 整除的数字,而是从一组中每五个项目中取出一个:
*/5 * * * * command
Run Code Online (Sandbox Code Playgroud)
这告诉 cron 匹配/50-59 ( *)分钟集合中的每第五个项目 ( ),但您可以像这样更改集合:
1-59/5 * * * * command
Run Code Online (Sandbox Code Playgroud)
这将从集合 1-59 中取出每五个项目,在第 6、11、16 分钟等时运行您的命令。
如果您需要比一分钟更细粒度的偏移量,您可以使用 sleep 命令作为 crontab 的一部分来破解它,如下所示:
*/5 * * * * sleep 15 && command
Run Code Online (Sandbox Code Playgroud)
这将每五分钟运行一次您的作业,但该命令实际上会在该分钟后 15 秒后启动。对于短期运行的工作,在其他事情之后几秒钟会产生所有不同,但您不想迟到整整一分钟,这是一个足够简单的技巧。
lar*_*sks 15
您可以随时使用cron. 如果你想每 5 分钟运行一次脚本 1,你可以这样开始:
*/5 * * * * /path/to/script1
Run Code Online (Sandbox Code Playgroud)
但这实际上只是以下内容的简写:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script1
Run Code Online (Sandbox Code Playgroud)
如果您想在脚本 1 后一分钟运行脚本 2,您可以这样做:
1,6,11,16,21,26,31,36,41,46,51,56 * * * * /path/to/script2
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
*/5 * * * * /path/to/script1
*/5 * * * * /path/to/script2
Run Code Online (Sandbox Code Playgroud)
然后在脚本 2 开始时,休眠一分钟:
sleep 60
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以使用 + 符号指示时间偏移。例如,要运行 at :01, :06, :11, :16 [...],请创建一个任务,例如
*/5+1 * * * * command
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25894 次 |
| 最近记录: |