crontab简介

  • crontab命令用于设置周期性被执行的命令,并将其存放于 crontab 文件中,以供之后读取和执行。

  • crontab储存的指令被守护进程激活,crond为其守护进程,crond常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

  • 1
    2
    3
    4
    5
    6
    7
    8
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed

crontab准备

  • 使用rsyslog可以通过日志中的信息来得知任务是否被执行了:

    1
    2
    sudo apt-get install -y rsyslog
    sudo service rsyslog start

    image-20231103174614045

crontab使用

新增任务

  • 首先来添加一个计划任务:

    1
    crontab -e

    如果是第一次启动则会出现如下内容,选择编辑工具,通常使用2号vim工具:

    image-20231103174813614

  • 接下来会进入下面的界面,这个界面就是添加计划的地方:
    image-20231103175001232

  • 接下来按下i进入编辑模式,在最后一行添加如下内容,作用是每分钟在用户目录下创建一个以当前的年月日时分秒为名字的空白文件:

    1
    */1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)
  • 然后按下Esc,输入:wq保存并退出,输入如下指令查看文件内容:

    1
    crontab -l

    image-20231103180017702

  • 虽然已经添加了任务,但如果cron的进程并没有启动,那么任务也不会被执行,可以通过如下两种方式确定cron是否已启动:

    1
    2
    3
    4
    # 第一种
    ps aux | grep cron
    # 第二种
    pgrep cron
  • 如果已经启动,在用户目录下使用ll命令,可以看到:

    image-20231103180524732

  • 通过如下命令可以查看到执行任务命令之后在日志中的信息反馈:

    1
    sudo tail -f /var/log/syslog

    image-20231103180704821

删除任务

  • 当不需要再自动执行任务,可以使用如下命令:

    1
    crontab -r
  • 执行后再查看任务列表,可以看到已经没有正在执行的任务:

    image-20231103180918834

系统级任务

  • 如果需要定义系统级别定时任务,可以使用sudo权限编辑crontab文件:

    1
    sudo vim /etc/crontab
  • cron服务的最小检测时间为分钟,所以cron每分钟会去文件中读取一次内容

cron的相关文件

  • /etc目录下查看cron相关的文件:

    1
    ll /etc | grep cron

    image-20231103181401458

  • 其中部分作用如下:

目录 作用
/etc/cron.daily 在每天的6点25分时执行一次
/etc/cron.hourly 在每小时的17分钟时执行一次
/etc/cron.monthly 在每月1号的6点52分时执行一次
/etc/cron.weekly 在每周第七天的6点47分时执行一次