我被要求编写 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
强制成功的匹配来匹配一条完整的线,从头到尾,而不是部分台词。
还相关: