删除 cron 作业及其评论,由 awk/sed 的 Puppet 创建的环境

remove cron jobs along with their comment, environment which were created by Puppet by awk/sed

有没有办法 remove/delete Puppet 使用 awk/sed 创建的 cron 作业?我知道我们可以通过 crontab -e 命令手动编辑,但这是一个脚本问题。 示例根 cron 是 /var/spool/cron/crontabs/root 中的一个文件。我想删除下面的行。

# Puppet Name: cron1
MAILTO=root@localhost.com,admin@localhost
* * * * * /bin/true
# Puppet Name: cron test
PATH="/usr/local/bin"
MAILTO=root@localhost.com
2-57 * * * * echo "test"
# Puppet Name: thank you
* * * * * echo "Thank you!"
....

Puppet cron 有模式:

  1. 开始于 # Puppet Name:
  2. 可以包含也可以不包含Cron环境。这可以是多行

谁知道怎么做,请帮忙。 谢谢!

您最好使用 Puppet 删除 Puppet 创建的 crontab 条目。

但是,如果您必须通过手动 shell 命令来完成,那么您可以通过此 sed 命令来完成:

sed -nie '/^# Puppet Name:/!{p;d};:p;n;/^[ \t]*\(\|#.*\|[A-Za-z_][A-Za-z_0-9]*[ \t]*=.*\)$/ b p' \
  /var/spool/cron/crontabs/root

说明

该命令假定要删除的每组行都以“Puppet Name:”注释开头,并继续直到并包括下一行,该行既不是空白(但用于空白),也不是注释,也不是环境变量赋值。它就地修改指定文件 (-i),禁用自动打印 (-n)。表达式 (-e) 执行以下操作:

  • 如果读取的下一行不是以文本“# Puppet Name:”开头,则打印该行并开始下一个循环 ({p;d})。否则,
  • 表达式中的这一点标记为“p”(:p);
  • 静默(因为自动打印被禁用)读取下一行输入(n);
  • 如果当前行是空白,是注释,或者是环境设置,则分支到标签 p (b p);
  • else 到达表达式的末尾。默默地(因为自动打印被禁用)开始下一个循环。