我想学习 cron,所以我搜索了一些高质量的教程。我发现如何设置 cron 任务。
我的目标是在网络上创建一个包含子文件夹的文件夹。每个子文件夹都是一个由 cron 执行的特定脚本。我不想让我们的系统超载,那么如何创建 cron 并在指定时间和运行上一个脚本后运行 shell 脚本?
例子:
Main Folder
Sub1 - script1
Sub2 - script2
Sub3 - script3
Cron 10:01 - runs script1
Cron 10:02 - runs script2
Cron 10:03 - runs script3
Cron 10:04 - runs script1
Cron 10:05 - runs script2
答案1
创意提纲
你的朋友是一位老派的cron
伙伴at
。
at 和 batch 使用 /bin/sh 从标准输入或指定文件读取稍后执行的命令
将其与 结合起来run-parts
。
run-parts——在目录中运行脚本或程序
这个想法是,你编写一个 cron 作业,使用 启动“子文件夹”中的脚本run-parts
。
如果您想要根据系统负载并行执行,则可以使用 包装每个单独脚本的执行batch
。
例子
在我的安装中我使用自己的包装脚本batchme
。这为邮寄报告和输出提供了一些增强功能。
cron.{daily,weekly,monthly} 脚本在我的 crontab 中以如下方式包装:
@midnight root test -x /usr/sbin/anacron || for script in $( run-parts --list /etc/cron.daily) ; do batchme --quiet --info "cron-daily ${script}" ${script} ; done
@weekly root test -x /usr/sbin/anacron || for script in $( run-parts --list /etc/cron.weekly) ; do batchme --quiet --info "cron-weekly ${script}" ${script} ; done
@monthly root test -x /usr/sbin/anacron || for script in $( run-parts --list /etc/cron.monthly); do batchme --quiet --info "cron-monthly ${script}" ${script} ; done
答案2
编写第 4 个脚本,按顺序调用前 3 个脚本。
#! /bin/sh
/path/to/script1
/path/to/script2
/path/to/script3
然后从 cron 调用第 4 个脚本。cron 最常见的问题是它使用最小 shell 运行,因此请使用完整路径调用所有脚本(包括第 4 个脚本)。
如果您遇到此问题,请发布您的 cron 条目以及有关所遇到的问题的更多详细信息。
答案3
我不会每隔一分钟左右通过 cron 调用一个新脚本,而是会调用一个脚本并将所有代码放入该脚本中。然后使用睡觉命令(假设您使用 bash 编写脚本,如果不是,则使用与该脚本语言等效的命令),在执行脚本的下一部分之前等待特定的时间间隔。这将确保脚本之间的时间,并且它们仅在另一个脚本成功完成后才运行。
例如:
克罗恩(每 15 分钟运行一次脚本)
*/15 * * * * /路径/到/脚本
脚本
#!/bin/bash
if command
then
command executed successfully
sleep 120
else
command failed so
execute all commands up to fi
fi
注意睡眠 120它告诉 bash 等待 2 分钟或 120 秒再执行下一行。