【Linux】定时任务crontab

在Linux或类Unix系统中,通常使用 crontab 命令在指定的时间执行一个shell脚本或者一系列Linux命令,也就是通常所说的定时任务。

一、cron 进程

在详细介绍crontab之前,必须要说一下 cron 进程

1、cron进程是linux中的守护进程,在系统后台运行,它会(默认每分钟)持续地检查/etc/crontab文件、/etc/cron.*/目录、/var/spool/cron/ 目录,读取调度任务并执行。

2、所有用户创建的crontab文件都保存在/var/spool/cron/ 目录,被cron服务定时检查。

二、crontab命令:

crontab 命令可以用来创建、编辑、查询、删除定时任务。

通过 crontab 命令,每个用户都可以编辑或者配置自己的定时任务,并拥有自己的 crontab 文件。

1、创建/编辑 crontab 文件

在 linux 命令行中输入crontab -e, 即可创建或编辑用户自己的crontab文件:

crontab -e

当crontab文件不存在时,即为创建;已存在时即为编辑;

此时,可以输入具体的crontab命令,用来增加、修改或删除当前用户的某一项任务。

<font color=red>在crontab文件中,每一行命令代表一个定时任务!</font>

2、crontab 语法(字段介绍)

crontab -e之后,即可输入crontab命令,具体语法如下:

    1 2 3 4 5 /path/to/command arg1 arg2
    或者:
    1 2 3 4 5 /root/ntp_sync.sh

各字段的格式:

{minute}{hour}{day-of-month}{month}{day-of-week}{full-path-to-shell-script}
分钟 (0-59)小时 (0-23)日期 (1-31)月份 (1-12)一周当中的某天 (0-7 [7 或 0 代表星期天])计划执行的脚本或命令的完整路径

3、crontab 命令示例

<font color=red>(结合第4部分的操作符使用方法一起学习)</font>

    # 每隔 5 分钟运行一次 backupscript 脚本 ##
    */5 * * * * /root/backupscript.sh
    
    ### 每天的凌晨 1 点运行 backupscript 脚本 ##
    0 1 * * * /root/backupscript.sh
    
    ### 每月的第一个凌晨 3:15 运行 backupscript 脚本 ##
    15 3 1 * * /root/backupscript.sh
    
    ### 每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业。
    59 23 * * 1,2,3,4,5 /root/bin/backup.sh
    或者:
    59 23 * * 1-5 /root/bin/backup.sh
    
    ### 每周六、周日的3点10分执行hello.sh
    10 3 * * 0,6 hello.sh
    
    ### 晚上11点到早上8点之间每两个小时,及每天早上八点,输出信息到文件中
    0 23-7/2,8 * * * echo "have a good dream:)" >> /tmp/test.txt

    ### 每个月的4号与每个礼拜的礼拜一到礼拜三的早上11点执行命令
    0 11 4 * 1-3 command
可以把经常要做的一些事放到其中,简化工作量,如每周一检查服务器的运行状态,查看报告,杀掉一些进程等等……

4、crontab 命令辅操作符

操作符允许为一个字段指定多个值,这里有三个操作符可供使用:

  • <font color=red>星号 (*) </font>: 代表任何时刻

    • 举个例子,在小时字段中,一个星号等同于每个小时;在月份字段中,一个星号则等同于每月。
  • <font color=red>逗号 (,) </font>: 在一个字段上指定多个值,例如:1,5,10,15,20,25
  • <font color=red>横杠 (-) </font>: 指定了一个值的范围

    • 例如:5-15 ,等同于使用逗号操作符键入的 5,6,7,8,9,…,13,14,15。
  • <font color=red>分隔符 (/) </font>: 代表‘每’,/n表示每隔n单位间隔

    • 例如:小时字段为*/5 表示每5小时,也可以写成0-23/5,意思一样。其它字段也是类似的。

5、crontab 查看和删除某用户所有的定时任务

    crontab -l  # 默认查看当前用户的所有定时任务

    # 使用-u 参数查看指定用户的定时任务,需要以root用户身份执行
    crontab -u username -l  

    crontab -r  # 删除当前用户的crontab的所有任务内容,慎用!
    
    ### 删除指定用户名下的定时任务,需要以 root 用户身份执行,慎用!
    crontab -r -u username

6、禁用邮件输出

默认情况下,某个命令或者脚本的输出内容(如果有的话)会发送到你的本地邮箱账户中。若想停止接收 crontab 发送的邮件,需要添加 >/dev/null 2>&1 这段内容到执行的命令的后面,例如:

0 3 * * * /root/backup.sh >/dev/null 2>&1

7、使用特殊字符串

linux中提供了以下 8 个特殊字符串,可以用来替代crontab命令的前五个字段,这样不但可以节省时间,还可以提高可读性。

特殊字符含义
@reboot在每次启动时运行一次
@yearly每年运行一次, 等同于 “0 0 1 1 *”
@annually(同 @yearly)
@monthly每月运行一次, 等同于 “0 0 1
@weekly每周运行一次, 等同于 “0 0 0”
@daily每天运行一次, 等同于 “0 0 *”
@midnight(同 @daily)
@hourly每小时运行一次, 等同于 “0

示例:

## 每小时运行一次 ntpdate 命令
@hourly /path/to/ntpdate
    原文作者:yolanda
    原文地址: https://segmentfault.com/a/1190000017010376
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞