如何通过脚本在关键字或字符串之后在 crontab 中插入一行

如何通过脚本在关键字或字符串之后在 crontab 中插入一行

我知道有很多关于通过脚本编辑 crontab 的文档,我可以通过使用以下命令添加条目来完成此操作:

line="* * * * * /my/folder/script.sh"
( crontab -l ; echo "$line" ) | crontab -

但是,我和其他一些人在超级用户下的 crontab 中各自拥有自己的“部分”。

如何将此行插入关键字或字符串下方,例如包含行下方,SPECIAL_JOB以免干扰其他人的部分和条目?我不想在 crontab 的底部继续添加新作业。

cron 条目看起来像这样:

# SPECIAL_JOB
* * * * * /my/folder/script.sh

理想情况下,我会删除该行的前一个条目,以使用以下命令保留单个新条目:

#remove entry
crontab -l | grep -ve '/my/folder/script.sh' | crontab -

答案1

这会在所有# SPECIAL_JOB行之后插入$line字符串。

crontab -l | sed '/# SPECIAL_JOB/a'"$line" | crontab -

答案2

为了避免替换文本中的特殊字符出现任何问题,我会将新的 cron 条目放入一个名为 example 的文件中new-entry,然后使用:

{ crontab -l | sed '/^# SPECIAL_JOB/{
n
r /path/to/new-entry
d
}' } | crontab -

(我对 subshel​​l 括号...进行了细微更改,)改为简单的花括号{... },因为实际上不需要创建子 shell;也没有坏处!

然后我使用 sed 解析传入的文本;它会查找以 开头的行# SPECIAL_JOB,然后执行三个操作:

  1. 打印当前行,然后读取下一行(这可以# SPECIAL_JOB打印)
  2. r从您的文件中读取作业
  3. d然后删除之前的行# SPECIAL_JOB——旧作业。

答案3

我建议在更大范围内使用ansible。

相关内容