Linux技巧:介绍设置定时周期执行任务的方法


Linux技巧:介绍设置定时周期执行任务的方法

文章插图
 
在 linux 中,可以使用 crontab 命令指定周期执行的定时任务,也就是周期性在指定的时间点执行某个任务,而不是执行一次之后就不再执行 。
这个 crontab 命令用于设置在指定时间点要进行的具体操作,通过特定格式的信息来进行指定,这些信息会被写入一个 crontab 文件 。
这些定时任务由 cron 守护进程来执行,该进程一直运行在后台,会定时检查 crontab 文件来判断需要做什么,如果某个任务需要被执行,就会执行该任务指定的操作 。
一般来说,系统启动时,init 进程会启动 cron 进程 。
可以使用 man crontab 来查看 crontab 命令的帮助信息 。
使用 man 5 crontab 来查看 ctontab 文件的格式,需要基于特定格式来设置定时任务 。
使用 man 8 cron 命令查看 cron 守护进程的帮助信息 。
编辑定时任务在 crontab 命令中,可以使用 -e 选项来指定编辑定时任务 。
查看 man crontab 对 -e 选项的说明如下:
The -e option is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables. After you exit from the editor, the modified crontab will be installed automatically. If neither of the environment variables is defined, then the default editor /usr/bin/editor is used.
即,crontab -e 命令编辑当前用户的 crontab 文件,在该文件中按照特定格式添加定时任务,优先使用 VISUAL、或者 EDITOR 环境变量值指定的编辑器来进行编辑 。
如果这两个环境变量都没有定义,则默认使用 /usr/bin/editor 文件指定的编辑器 。
在 Debian 系统和 Ubuntu 系统上,/usr/bin/editor 文件是一个链接文件,最终链接到 /bin/nano 文件,也就是默认使用 nano 编辑器 。
在 Ubuntu 系统上测试发现,第一次执行 crontab -e 命令时,它会调用 select-editor 命令提供一个编辑器菜单列表,可以选择一个默认的编辑器 。如果按 CTRL-D,什么都没有选择,默认会使用 nano 编辑器 。
crontab 文件格式执行 crontab -e 命令后,就会打开当前用户的 crontab 文件,在这个文件中,以 # 开头的语句是注释语句 。
默认的 crontab 文件包含一些注释,在注释中提供了一个例子、以及设置定时任务的字段格式说明 。具体内容如下:
# 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/## m hdom mon dowcommand这里举例说明了一个 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 定时任务,在每周一的五点钟会执行 tar -zcf /var/backups/home.tgz /home/ 命令 。
下面具体说明如何理解这个定时任务的各个字段 。
在 crontab 文件中,通过 m h dom mon dow command 这六个字段来设置定时任务,每一行对应一个定时任务 。这六个字段的含义说明如下:
  • m:对应分钟(minute)
    指定要在一小时之中的第几分钟执行该任务 。取值范围是 0-59.
  • h:对应小时(hour)
    指定要在一天之中的第几个小时执行该任务 。取值范围是 0-23.
  • dom:对应日期(day of month)
    指定要在一月之中的第几天执行该任务 。取值范围是 0-31.
  • mon:对应月份(month)
    指定要在一年之中的第几月执行该任务 。取值范围是 1-12 。
    也可以通过月份英文名称的前三个字母来指定,不区分大小写 。例如,一月的英文单词是 january,那么这里可以用 jan 来指定一月 。
  • dow:对应星期几(day of week)
    指定要在一周之中的星期几执行该任务 。取值范围是 0-7,0 和 7 都对应星期天 。
    也可以通过星期英文名称的前三个字母来指定,不区分大小写 。例如,星期一的英文单词是 monday,那么这里可以用 mon 来指定星期一 。
  • command:对应具体的操作
    提供具体的命令来指定进行什么操作,可以提供脚本文件的路径来执行该脚本文件 。
这六个字段要求用空格隔开 。且每个字段都必须提供值,不能省略某个字段的值 。从第五个字段之后的所有内容都属于第六个字段,也就是要执行的操作 。
前五个字段可以使用下面的特殊字符来指定一些特殊的时间: