crontab是否具有用于在不使用编辑器的情况下创建cron作业的参数(crontab -e)。 如果是这样,那么从Bash脚本创建cronjob的代码是什么?
#1楼
这个较短的文件不需要临时文件,可以避免多次插入,并且可以更改现有条目的时间表。
说您有这些:
croncmd="/home/me/myfunction myargs > /home/me/myfunction.log 2>&1"
cronjob="0 */15 * * * $croncmd"
要将其添加到crontab中,不要重复:
( crontab -l | grep -v -F "$croncmd" ; echo "$cronjob" ) | crontab -
要将其从crontab中删除,无论其当前时间表如何:
( crontab -l | grep -v -F "$croncmd" ) | crontab -
笔记:
- grep -F从字面上匹配字符串,因为我们不想将其解释为正则表达式
- 我们也忽略了时间安排,只寻找命令。 这条路; 可以更改时间表,而无需在crontab中添加新行
#2楼
为了使用BASH脚本快速,轻松地创建/替换crontab,我使用了以下表示法:
crontab <<EOF
00 09 * * 1-5 echo hello
EOF
#3楼
您可能可以将默认编辑器更改为ed,并使用heredoc进行编辑。
EDITOR=ed
export EDITOR
crontab -e << EOF
> a
> * * * * * Myscript
> * * * * * AnotherScript
> * * * * * MoreScript
> .
> w
> q
> EOF
请注意,该代码中的前导>表示按下回车/输入键以创建新行。
a表示APPEND,因此不会覆盖任何内容。
的。 表示您已完成编辑。
w表示写更改。
q表示退出或退出ed。
你可以看看
crontab -l
您也可以删除条目。
EDITOR=ed
export EDITOR
crontab -e << EOF
> /Myscript/
> d
> .
> w
> q
> EOF
这将删除其中包含Myscript的crontab条目。
d表示删除/ /内的模式。
不再检查
crontab -l
这种解决方案在脚本内部的作用少了,当然> :)
#4楼
您可能会自动执行此操作,并且不希望将一个作业添加两次。 在这种情况下,请使用:
__cron="1 2 3 4 5 /root/bin/backup.sh"
cat <(crontab -l) |grep -v "${__cron}" <(echo "${__cron}")
仅在使用BASH时有效。 我不知道正确的DASH( sh
)语法。
更新:如果用户还没有crontab,这将不起作用。 一种更可靠的方法是:
(crontab -l ; echo "1 2 3 4 5 /root/bin/backup.sh") | sort - | uniq - | crontab -
另外,如果您的发行版支持它,则还可以使用一个单独的文件:
echo "1 2 3 4 5 /root/bin/backup.sh" |sudo tee /etc/crond.d/backup
在另一个SO问题中找到了那些。
#5楼
仅在找不到所需字符串的情况下才编辑crontab的变体:
CMD="/sbin/modprobe fcpci"
JOB="@reboot $CMD"
TMPC="mycron"
grep "$CMD" -q <(crontab -l) || (crontab -l>"$TMPC"; echo "$JOB">>"$TMPC"; crontab "$TMPC")
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3169374