crontab是否有不使用编辑器(crontab -e)创建cron作业的参数?如果是,从Bash脚本创建cron作业的代码是什么?
当前回答
编辑(固定覆盖):
cat <(crontab -l) <(echo "1 2 3 4 5 scripty.sh") | crontab -
其他回答
不,crontab中没有修改cron文件的选项。
您必须:获取当前的cron文件(crontab -l > newfile),更改它并将新文件放置到位(crontab newfile)。
如果你熟悉perl,你可以使用Config::Crontab这个模块。
LLP安德里亚
很有可能您正在将此工作自动化,并且您不希望单个工作添加两次。 在这种情况下使用:
__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问题中找到的。
脚本函数添加cronjob。检查重复条目,可用表达式* > "
cronjob_creator () {
# usage: cronjob_creator '<interval>' '<command>'
if [[ -z $1 ]] ;then
printf " no interval specified\n"
elif [[ -z $2 ]] ;then
printf " no command specified\n"
else
CRONIN="/tmp/cti_tmp"
crontab -l | grep -vw "$1 $2" > "$CRONIN"
echo "$1 $2" >> $CRONIN
crontab "$CRONIN"
rm $CRONIN
fi
}
测试:
$ ./cronjob_creator.sh '*/10 * * * *' 'echo "this is a test" > export_file'
$ crontab -l
$ */10 * * * * echo "this is a test" > export_file
来源:我的大脑;)
下面是一个bash函数,用于向crontab添加命令而不重复
function addtocrontab () {
local frequency=$1
local command=$2
local job="$frequency $command"
cat <(fgrep -i -v "$command" <(crontab -l)) <(echo "$job") | crontab -
}
addtocrontab "0 0 1 * *" "echo hello"
为了用BASH脚本快速创建/替换crontab,我使用了下面的符号:
crontab <<EOF
00 09 * * 1-5 echo hello
EOF