crontab是否有不使用编辑器(crontab -e)创建cron作业的参数?如果是,从Bash脚本创建cron作业的代码是什么?


当前回答

我想找一个这样的例子,所以可能会有帮助:

COMMAND="/var/lib/postgresql/backup.sh"
CRON="0 0 * * *"
USER="postgres"
CRON_FILE="postgres-backup"
# At CRON times, the USER will run the COMMAND
echo "$CRON $USER $COMMAND" | sudo tee /etc/cron.d/$CRON_FILE
echo "Cron job created. Remove /etc/cron.d/$CRON_FILE to stop it."

其他回答

脚本函数添加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

来源:我的大脑;)

这个较短的表不需要临时文件,它不受多次插入的影响,并且允许您更改现有条目的计划。

假设你有这些:

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添加新行风险的情况下更改时间表

你可以在飞行中完成

crontab -l | { cat; echo "0 0 0 0 0 some entry"; } | crontab -

Crontab -l列出当前的Crontab任务,cat打印它,echo打印新命令,Crontab -将所有打印的内容添加到Crontab文件中。您可以通过执行一个新的crontab -l来查看效果。

假设你是以“ubuntu”用户登录的,但是你想把一个作业添加到另一个用户的crontab中,比如“john”。您可以执行以下操作:

(sudo crontab -l -u john; echo "* * * * * command") | awk '!x[$0]++' | sudo crontab -u john -

此解决方案的大部分来源:https://www.baeldung.com/linux/create-crontab-script

我有吨的问题试图添加一个工作到另一个用户的crontab。它不断复制crontab,或者直接删除它们。不过,经过一些测试后,我相信这行代码将以非破坏性的方式将一个新作业附加到指定用户的crontab,包括不创建已经存在的作业。

不,crontab中没有修改cron文件的选项。

您必须:获取当前的cron文件(crontab -l > newfile),更改它并将新文件放置到位(crontab newfile)。

如果你熟悉perl,你可以使用Config::Crontab这个模块。

LLP安德里亚