Linux crontab 定时任务命令详解

一、简介

crontab 命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活, cron 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为 cron jobs。crontab 文件包含送交 cron 守护进程的一系列作业和指令。每个用户可以拥有自己的 crontab 文件;同时,操作系统保存一个针对整个系统的 crontab 文件,该文件通常存放于 /etc 或者 /etc 之下的子目录中,而这个文件只能由系统管理员来修改。crontab 文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。

二、安装&启动

cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务,或者可以在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service cron start 

  1. 启动 cron
    user@ae01:~$ sudo service cron start
    cron start/running, process 32379
    user@ae01:~$
    user@ae01:~$ lsof | grep cron
    cron      32379       root  cwd   unknown                         /proc/32379/cwd (readlink: Permission denied)
    cron      32379       root  rtd   unknown                         /proc/32379/root (readlink: Permission denied)
    cron      32379       root  txt   unknown                         /proc/32379/exe (readlink: Permission denied)
    cron      32379       root NOFD                                   /proc/32379/fd (opendir: Permission denied)
    user@ae01:~$
  2. 重新载入配置
    user@ae01:~$ sudo service cron reload
    user@ae01:~$
  3. 停止 cron
    user@ae01:~$ sudo service cron stop
    cron stop/waiting
    user@ae01:~$
    user@ae01:~$ lsof | grep cron
    user@ae01:~$

三、语法&参数

usage:  crontab [-u user] file
        crontab [ -u user ] [ -i ] { -e | -l | -r }
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)
user@ae01:~$

Note:每个用户都有自己的 crontab 文件,如果你操作其他用户的的 crontab 需要使用 -u 参数

  1. 查看 root 的crontab 列表
    user@ae01:~$ sudo crontab -u root -l
    no crontab for root
  2. 配置 当前用户的 定时任务
    user@ae01:~$ crontab -e
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

    Note:crontab 的配置的格式说明:
    #MIN     HOUR     DAY     MONTH     DAYOFWEEK     COMMAND 
    进入编辑模式之后,编辑的内容一定要符合下面的格式:格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 
    分钟 (0-59) 
    小時 (0-23) 
    日期 (1-31) 
    月份 (1-12) 
    星期 (0-6)//0代表星期天
    除了数字还有几个个特殊的符号就是"*"、"/"、"-"和",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字

 四、练习

  1. 每天早上6点 
    0 6 * * * command line 
  2. 每两个小时 
    0 */2 * * * command line 
  3. 晚上11点到早上8点之间每两个小时,早上八点 
    0 23-7/28 * * * command line 
  4. 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    0 11 4 * 1-3 command line 
  5. 1月1日早上4点
    0 4 1 1 * command line 
原文地址:https://www.cnblogs.com/tannerBG/p/4062652.html