【问题标题】:How to add a new task in crontab using a script如何使用脚本在 crontab 中添加新任务
【发布时间】:2017-08-13 21:14:42
【问题描述】:

我需要使用 crontab 添加新任务以在特定时间完成。我需要使用脚本添加这些任务。我会做类似的事情:

echo "command" >> /etc/crontab

但我知道这个 crontab 文件只针对 root 用户,所以我需要使用:

crontab -e

打开我自己的任务列表。问题是前面的命令打开了一个临时文件,我找不到它。 (它在 /tmp 或其他东西中有一个随机名称?)我会这样做:

echo "5 5 5 5 5 user command" | crontab -e

在我自己的 crontab 列表中写一个新行,但这不起作用。

我有什么不对吗?有没有人有解决这个问题的想法?我正在使用 Ubuntu。

【问题讨论】:

    标签: linux ubuntu cron crontab cron-task


    【解决方案1】:

    crontab 使用该临时文件为您提供插入新命令的权限。你不能编辑你自己的文件,或者弄乱系统的文件副本。相反,请尝试创建自己的文件;然后我们 **crontab -l 得到 那个 列在系统 crontab 中。

    如果你很固执,可以尝试将 vi 命令流式传输到 crontab -e,但这样做很难。

    这足以让你继续前进吗?

    【讨论】:

      【解决方案2】:

      您目前的方法有困难,因为crontab -e 不从标准输入读取。但是,没有-e 开关的crontab 确实从标准输入读取。

      最明显的方法是将新的 cron 作业附加到现有的 crontab 中:

      crontab -l > current_cron
      cat >> current_cron << EOF
      # new cron job here
      EOF
      crontab < current_cron
      rm -f current_cron
      

      这种方法的明显问题是无法检查 cron 作业是否已经存在。这就是它可能变得有点棘手的地方。

      解决这个问题的一种方法是在 crontab 中设置一个“脚本管理部分”,通常位于底部:

      # DO NOT MODIFY THE SECTION BELOW MANUALLY.  IT'S MANAGED BY AUTOMATION.
      #---script managed section---
      "cron job 1"
      "cron job 2"
      

      然后,脚本可以管理此部分 - 最好有一个脚本来管理所有自动 cron 作业:

      crontab -l > current_cron
      sed '/---script managed section---/q' current_cron > new_cron
      cat >> new_cron << EOF
      # updated cron jobs here
      EOF
      crontab < new_cron
      rm -f new_cron current_cron
      

      如果我们需要更细粒度的控制,那么我们可以为每个托管的 cron 作业设置一个部分,带有开始和结束标记,并让脚本每次处理一个特定的部分。

      但是,对于 Ubuntu,有一个更好的主意。我们可以完全取消 crontab 并改用 /etc/cron.d。在这里,每个 cron 作业都有一个文件,它遵循 cron 作业规范的确切格式。由于 cron 作业和 /etc/cron.d 文件之间存在 1:1 的对应关系,因此它们直接作为文件进行管理,而不是通过 crontab 命令进行管理,因此自动化更加容易。

      来自 Ubuntu 上的man cron

      在 Debian 中,cron 读取 /etc/cron.d 目录中的文件。 cron 以与 /etc/crontab 文件相同的方式处理 /etc/cron.d 中的文件(它们遵循该文件的特殊格式,即它们包含用户字段)。但是,它们独立于 /etc/crontab:例如,它们不会从它继承环境变量设置。此更改特定于 Debian。

      【讨论】:

        猜你喜欢
        • 2017-07-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 2020-06-27
        • 2016-11-28
        • 2022-01-20
        • 1970-01-01
        相关资源
        最近更新 更多