crontab 条目的 shell 脚本

crontab 条目的 shell 脚本

我被要求编写 shell 脚本来执行以下任务:

更新 cronentry 来自

\*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out 

\*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out 

编辑之前备份 cronentry

我已经尝试了以下脚本,需要检查它是否有效或是否需要任何修改 - 请帮助!

更新cronentry的Shell脚本(编辑前备份)

#!/bin/sh
crontab -l > my_crontab.backup

crontab -l | grep -v "*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out" >*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out

echo "*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out" >>*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out

crontab */15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out

答案1

您希望删除特定的 crontab 条目并将其替换为另一个条目。

您可以使用以下命令将现有的 crontab 计划转储到文本文件

crontab -l >crontab-old.txt

假设您知道现有的 crontab 条目是确切地

*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out 

(任何地方都没有额外的空格)您可以crontab-old.txt使用以下命令从文件中过滤掉它:

grep -v -x -F '*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out' crontab-old.txt >crontab-new.txt

要将新计划添加到crontab-new.txt文件中,您可以这样做

cat <<'END_ENTRY' >>crontab-new.txt
*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out 
END_ENTRY

最后,使用以下代码加载新时间表:

crontab crontab-new.txt

您现在拥有crontab-old.txt旧计划和crontab-new.txt新计划,并且您已加载新计划。

显然你应该如果您手动运行此操作,或者在开发脚本来执行此操作,请查看上述每个步骤之间的文件,以确保对它们进行正确的编辑。

在脚本中,这可能看起来像

#!/bin/sh

crontab -l >crontab-old.txt

grep -v -x -F '*/15 * * * * /bin/sh /opt/myscript/myscript.sh > /tmp/myscript.check.out' crontab-old.txt >crontab-new.txt

cat <<'END_ENTRY' >>crontab-new.txt
*/30 2,4,6 * * * /bin/sh /opt/myscript/myscript2.sh > /tmp/myscript2.check.out 
END_ENTRY

crontab crontab-new.txt

grep命令用于-F匹配给定的模式作为字符串而不是作为正则表达式。该模式包含*正则表达式中的特殊字符,因此 using-F允许我们匹配字符串而无需对这些字符进行特殊处理。我还使用-x强制成功的匹配来匹配一条完整的线,从头到尾,而不是部分台词。

还相关:

相关内容