Linux crontab 定时任务命令详解

时间:2021-06-14 07:45:58

一、简介

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
    user@ae01:~$
    user@ae01:~$ lsof | grep cron
    cron root cwd unknown /proc//cwd (readlink: Permission denied)
    cron root rtd unknown /proc//root (readlink: Permission denied)
    cron root txt unknown /proc//exe (readlink: Permission denied)
    cron root NOFD /proc//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 a.m every week with:
    # * * 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点
      * * * command line 
  2. 每两个小时 
     */ * * * command line 
  3. 晚上11点到早上8点之间每两个小时,早上八点 
     -/, * * * command line 
  4. 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
       * - command line 
  5. 1月1日早上4点
        * command line