我有以下示例crontab文件。我想编写一个脚本来评论H5TEMP
的作业,如果没有评论的话。应该使用#HC#
进行评论。该文件应包含所有行,但只更改符合条件的行。我想将两个参数传递给此脚本。
H5TEMP
- 要搜索的字词,#HC#
- 评论标记例如。 disable_cronjob.sh H5TEMP #HC#
当前档案:
#=====================================
#Backup Status Report H5TEMP
0 8 * * * /app/oracle/admin/scripts/backup_report.sh > /dev/null 2>&1
0 8 * * * /app/oracle/admin/scripts/backup_report.sh H5TEMP > /dev/null 2>&1
#=====================================
输出文件:
#=====================================
#Backup Status Report H5TEMP
0 8 * * * /app/oracle/admin/scripts/backup_report.sh > /dev/null 2>&1
#HC#0 8 * * * /app/oracle/admin/scripts/backup_report.sh H5TEMP > /dev/null 2>&1
#=======================================
我尝试使用以下命令,它只更改了所需的行。但是我需要完全按照上面的方式使用该文件:
awk '/H5TEMP/ && ! /^#/ { print "#HC#" $0 }' < file
我可以直接更改crontab文件吗?如果没有,那么将创建临时文件并更新crontab文件。
答案 0 :(得分:0)
/etc/crontab
不适用于自动操作。这可能会变得脆弱和危险,特别是如果多个并发软件包操纵它。
对于自动操作cron作业,强烈建议您使用文件夹/etc/cron.d
(和朋友)。每个文件都有一个cronjob,您可以通过添加,覆盖或删除文件轻松操作它们。 /etc/cron.d
就是为了这个目的。
答案 1 :(得分:0)
你对awk的电话接近了。试试这个:
awk '/^[^#].*H5TEMP/ {printf "#HC#"} {print $0}' < file
(不使用&& !
语法,因为它似乎不可移植)
答案 2 :(得分:-1)
#!/bin/bash
# validate arguments here ...
temp=$(mktemp)
crontab -l |
awk -v pattern="$1" -v comment="$2" '
BEGIN {exit_status = 1}
$0 ~ pattern && $0 !~ "^"comment {$0 = comment $0; exit_status = 0}
{print}
END {exit exit_status}
' > "$temp" &&
crontab "$temp"