【问题标题】:How to tell a crontab to expire on particular date?如何告诉 crontab 在特定日期过期?
【发布时间】:2018-01-23 23:28:08
【问题描述】:

使用以下 cron 模式每 6 小时执行一次任务很简单:

* */6 * * *

是否可以在特定日期停止上述 cron 作业,例如 2018-02-10

【问题讨论】:

  • 当然,为该日期创建另一个 cronjob 以删除第一个。
  • 我不这么认为。我建议在Unix & Linux SE 上发帖,并更一般地询问如何设置一个计划的循环任务,该任务将运行指定的时间/迭代次数。
  • @MarkSetchell 但是你会让那个 cronjob 留在 crontab 中并每年运行(编辑:没关系,cronjob 可以删除初始的 cronjob 和它本身。我仍然觉得必须有一个更优雅的解决方案)
  • 类似于@MarkSetchell 解决方案,只需让调用的任务本身删除 crontab 条目。如果这不能直接实现(例如,您正在运行一些本机命令),则使用脚本将其置于前端;如果编写得当,该脚本将可以重复使用,因此您可以将其作为永久实用程序保留。但是,我不认为 Cron 曾经打算用作功能齐全的任务调度程序,因此请查看其中的一些(例如,快速的互联网搜索出现了可能满足您需求的 Chronos)
  • 您也可以使用at 命令。

标签: linux cron


【解决方案1】:

如果这是一次性操作,请稍后使用at 命令调度程序删除cron 条目。

描述 at 并从标准输入或稍后执行的指定文件中批量读取命令。

$ at -f "/usr/local/etc/remove-cron-entry.sh" 6:30 PM "2018-02-10"

上面会使用-f选项来读取一个文件,然后剩下的就是时间戳,分为时间和日期两类。

您的删除脚本可能如下所示:

$ cat /usr/local/etc/remove-cron-entry.sh
mv /etc/cron.d/my-awesome-cron /tmp/somewhere/my-awesome-cron &> /tmp/cron-move.log

at 在重新启动和/或从用户会话登录/注销时保持不变。这些职位可以在/var/spool/at找到。

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2017-12-03
    相关资源
    最近更新 更多