如何注释所有 crontab 条目,然后使用脚本取消注释

如何注释所有 crontab 条目,然后使用脚本取消注释

需要明确的是,我想评论 crontab 条目,而不是基本文件。通常,我这样做

crontab -e

30 * * * * /u01/app/abccompny/scripts/GenerateAWRReport.pl
01,31 * * * * /u01/app/abccompny/scripts/table_growth_monitor.sh
30 0,4,8,12 /u01/shivam/script/getMongoData.sh 

我在每行前面添加“#”并保存它。同样,工作完成后,我删除“#”。

#30 * * * * /u01/app/abccompny/scripts/GenerateAWRReport.pl
#01,31 * * * * /u01/app/abccompny/scripts/table_growth_monitor.sh
#30 0,4,8,12 /u01/shivam/script/getMongoData.sh 

有没有一种有效的方法可以使用脚本来做到这一点?

答案1

将当前的 crontab 导出到文件中,删除 crontab,然后使用之前创建的文件。

$ crontab -l > cron_content
$ crontab -r
$ <this is where you do your stuff>
$ crontab cron_content

答案2

我们将 cron 复制到其他文件,进行更改并再次应用 cron。

将您的 cron 复制到某个文件,

crontabl -l > filename

现在filename有了你的 cron,你可以使用你的 cron 来应用

crontab filename

注释以 # 开头,因此我们将从行首添加和删除 #。

要添加和删除评论,您可以使用sed

删除评论 (#)

sed -i -e 's/^# //g' filename

添加评论 (#)

sed -i -e 's/^/# /g' filename

应用 cron 使用

crontab filename

检查你的计划任务

crontab -l

Happy Scripting

答案3

您可以使用以下脚本在 crontab 中添加或删除注释。

#!/bin/bash

# you must have permission to read the crontab

if [[ $1 == "-add" ]]; then
        crontab -l > /tmp/cron_export
        awk '$0="#"$0' /tmp/cron_export > /tmp/cron_comment
        crontab -r
        crontab cron_comment
elif [[ $1 == "-remove" ]]; then
        crontab -l > /tmp/cron_export
        awk '{ print substr($0,2) }' /tmp/cron_export > /tmp/cront_uncomment
        crontab -r
        crontab cron_uncomment
else    
        echo "no option was selected. Please use -add to add comments or -remove to remove comments"
fi

# Remove all the create files for the operations

for f in /tmp/cron*; do
    [ -e "$f" ] && rm cron* || echo "No files to remove were found"
    break
done

该脚本的用法应该是:

添加评论

./youscriptname.sh -add

删除评论

./youscriptname.sh -remove

答案4

老帖子,但我认为有一个更快更简单的解决方案:

在 Linux 上,一切都是文件。 crontab 将每个用户的 cron 存储在 /var/spool/cron/ 中

  • 在 Ubuntu 20.04 上:/var/spool/cron/crontabs/<用户>
  • 在 RHEL7 上:/var/spool/cron/<用户>

所以你可以:

# comment
sed -i 's/^/#/' /var/spool/cron/<user>

# uncomment
sed -i 's/^#//' /var/spool/cron/<user>

相关内容