我正在尝试通过 osx 10.8.5 中的 crontab 运行一个将在 4:30 运行的脚本。
30 16 * * 1-5 /Library/Frameworks/Python.framework/Versions/2.7/bin/python /Users/lego90511/PycharmProjects/Stock\ Scanner/stock_scanner.py
但是我今天意识到,我的电脑并不总是在 4:30 开机。所以我添加了修复 * 16 * * 1-5。但后来我意识到它可能根本不在 4-5 之间。我如何将 crontab 设置为在下午 4 点(16 个 cron 时间)之后的任何时间运行?
答案1
由于 cron 的处理方式,我不确定你是否可以使用 cron独自做到这一点。从cron(8)手册页:
然后,cron 实用程序每分钟唤醒一次,检查所有存储的 crontab,检查每个命令以查看是否应在当前分钟运行。执行命令时,任何输出都会邮寄给 crontab 的所有者(或 crontab 中 MAILTO 环境变量中指定的用户,如果存在)。
Cron 没有方法识别已经运行的条目。因此,您可以这样做:
* 16-23 * * 1-5 <script>
但是,这只会告诉 cron 运行这个脚本每一分钟从 16:00 到 23:59,只要 cron 正在运行。(查看crontab(5)手册页,我认为你不能做“16-24”或“16-0”。
所以如果你想要运行某个东西一次下午 4 点到午夜之间,我的建议是让 cron 在下午 4 点之后每 15 分钟启动一次脚本:
*/4 16-23 * * 1-5 <script>
然后,在脚本中,包括一些方法来识别脚本是否已经在当天运行过。
答案2
对于 Linux,有阿纳克隆查找错过的 cron-jobs。(见这里)
对于 Mac OSX,我发现此版本但似乎已经停产了。
还有一个版本这里代表“豹子”:
注意:此版本的 Anacron 可在 MacOS 10.5 (Leopard) 上运行,但这不是必需的,因为 Leopard launchd 将在机器下次唤醒时运行跳过的作业。更多信息请阅读http://mac.majorgeeks.com/files/details/anacron.html#Z5s7GokjQVbUATOU.99
您可以尝试在“Mountain lion”上运行它,或者切换到“Launchd”,它具有内置运行错过的作业的功能。
Cron 和 Anacron
如果您运行 Mandrake、SUSE 或任何其他发行版,并且您的计算机并非全天 24 小时开机,则可能会有多个 Cron 作业被遗忘,因为它们被安排在凌晨 3:00AM-4:00AM。安装 Anacron 将纠正这种情况。Anacron 会在您启动计算机五分钟后搜索错过的 Cron 作业并执行它们。结果,您会注意到 CPU 和硬盘大约五到七分钟的额外活动。注意:Red Hat 和 Fedora 默认预安装了 Anacron。安装 Anacron 很简单,不需要特殊配置。下面是使用 Mandrake 安装的示例:
Mandrake 控制中心 > 软件管理 > 安装软件 > 搜索 Anacron。