定时任务(crontab)

crontab

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

在这里插入图片描述
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

f1 f2 f3 f4 f5 program
minute hour day month week command
  • 其中 f1 是表示分钟
    f2 表示小时
    f3 表示一个月份中的第几日
    f4 表示月份
    f5 表示一个星期中的第几天
    program 表示要执行的程序。

  • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推

  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推

  • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推

  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。

  • 使用方法

在这里插入图片描述

crontab命令详解

  • 命令格式:
    crontab[-uuser]file
    crontab[-uuser][-e|-l|-r]

  • 命令功能:
    通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或shellscript脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

  • 命令参数:
    -uuser:
    用来设定某个用户的crontab服务,例如,“-uixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

  • file:
    file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

  • -e:
    编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

  • -l:
    显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

  • -r:
    从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

  • -i:
    在删除用户的crontab文件时给确认提示。

常用方法

  • 创建一个新的crontab文件

在这里插入图片描述

  • 列出crontab文件

为了列出crontab文件,可以用:HOME目录中对crontab文件做一备份:HOME/mycron这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

  • 编辑crontab文件
  • 删除crontab文件

在这里插入图片描述

  • 恢复丢失的crontab文件

在这里插入图片描述

文件

  • crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。

  • crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。crontab格式用法是什么?

语法介绍

  • 使用权限:
    root用户和crontab文件的所有者

  • 语法:
    crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]

  • 说明:
    crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
    -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

  • 参数
    -e [UserName]:
    执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
    -r [UserName]:
    删除目前的时程表
    -l [UserName]:
    列出目前的时程表
    -v [UserName]:
    列出用户cron作业的状态

  • 注意
    当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。
    %在crontab中被认为是newline,要用\来escape才行。比如crontab执行行中,如果有"date +%Y%m%d",必须替换为:“date +%Y%m%d”

  • crontab中的输出配置

  • crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出。

shell命令的结果可以通过‘> ’的形式来定义输出
/dev/null 代表空设备文件
(>)大于号 代表重定向到哪里,例如:echo “123” > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么重定向输出语句的含义:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

扩展(at命令和crontab简单对比)

  • crontab 和 at 的简单区别和用法
    两个命令都可以用来提交job
    但是crontab 主要用来提交不断循环执行的job
    而at 用来提交一段时间后执行的job(执行完就自动删除整个job)

我们的定时任务到此完毕~ _~

猜你喜欢

转载自blog.csdn.net/qq_49296785/article/details/108879481