我知道有很多关于通过脚本编辑 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 -
(
我对 subshell 括号...进行了细微更改,)
改为简单的花括号{
... }
,因为实际上不需要创建子 shell;也没有坏处!
然后我使用 sed 解析传入的文本;它会查找以 开头的行# SPECIAL_JOB
,然后执行三个操作:
- 打印当前行,然后读取下一行(这可以
# SPECIAL_JOB
打印) r
从您的文件中读取作业d
然后删除之前的行# SPECIAL_JOB
——旧作业。
答案3
我建议在更大范围内使用ansible。