【crontab】How do I create a crontab through a script?

一、实验背景

I need to add a cron job thru a script I run to set up a server.

 I can use crontab -e  but that will open an editor to edit the current crontab.

 I want to do this programmatically.

Is it possible to do so?

二、实验操作

方式一:添加任务到配置文件 /etc/crontab

# cat /etc/crontab


#####################

#!/bin/bash

CRONTAB_ FlLE="/etc/crontab"

systemctl stop ntpd.service

systemctl disable ntpd.service

/usr/bin/sed -ri '/ntpdate/d' ${CRONTAB_ FlLE}

sh -c "echo '*/30 * * * *  root  ntpdate  xx.xx.xx.xx  >/dev/null 2>&1' >> ${CRONTAB_ FlLE}"

systemctl restart crond.service

##########################

注意:

1. 使用ntpdate定时任务同步时间,不能同时启动ntpd服务

2. 使用/etc/crontab 添加定时任务,那么 使用 crontab -u root -l  无法直接显示用户的定时任务


方式二、使用 crontab crontabFile 方式添加


##################################

#!/bin/bash

myscript="/path/to/resume_backup.sh"

filePath=$(cd "$(dirname "$0")";pwd)

echo $filePath

crontab -l > cronFile

number=`grep -n "$myscript" cronFile | cut -d ":" -f 1`

line=$number

echo $line

if [ -z $line ];then

  echo "该任务不存在,将添加"

  echo  "1 12 * * * root $myscript" >> cronFile

  crontab cronFile

  rm -f cronFile

else

  echo "该任务已经存在,将会先删除再添加"

  sed -i '/'$myscript'/d' cronFile

  echo  "1 12 * * *  root  $myscript" >> cronFile

  crontab cronFile

  rm -f cronFile

fi

##################################

这个脚本的大致功能就是,首先去判断任务是否已经存在,存在的话就先删除,再去添加,不存在就直接添加了。

crontab -l > cronFile   这行就是将定时任务写到一个中间文件中,方便下面对定时任务的操作

number=`grep -n "$myscript" cronFile  | cut -d ":" -f 1`   这个是获得$myscript在cronFile中所在的行数

 if [ -z $line ]; 判断line是否为空

echo  "1 12 * * *  root  $myscript'' >> cronFile  将定时任务 写到 cronFile中去

crontab cronFile  将cronFile中的内容写到定时任务中去(全部覆盖)

sed -i '/'$myscript'/d' cronFile  从cronFile中删除包含$myscript的行

rm -f cronFile  删除中间文件cronFile

注:使用这种方式可用 crontab -u root -l 直接查看设置的定时任务


方式三、使用crontab 的非交互方式

#  (crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/shell.sh  args") | crontab -

如果脚本中设置了 set -e    那么需要 crontab -l 2>/dev/null || true

注:使用这种方式可用 crontab -u root -l 直接查看设置的定时任务

# crontab -u root -l

三、参考

脚本添加定时任务(Linux)

https://blog.csdn.net/javaweiming/article/details/8722525

How do I create a crontab through a script

https://stackoverflow.com/questions/4880290/how-do-i-create-a-crontab-through-a-script

shell中各种括号的作用()、(())、[]、[[]]、{}

https://blog.csdn.net/taiyang1987912/article/details/39551385

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、项目目标 搭建一个高可用web集群网站 二、项目规划 2.1 ip地址规划 2.2 拓扑图 2.3 相关说明 ...
    夏日之光阅读 4,116评论 0 1
  • 系统巡检脚本:Version 2016.08.09 ############################ 系统...
    NamasAmitabha阅读 1,402评论 0 0
  • Linux定时任务Crontab命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的。...
    孙燕超阅读 1,851评论 0 4
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,926评论 0 10
  • 你应该是冷的, 彻底的冷, 以致我望向你的炙热的眼神, 也不得不结成冰, 僵硬而脆弱。
    如果而已阅读 245评论 0 1