Menu Home

Ubuntu Server 定时任务详解

cron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。在Ubuntu server 下,cron是被默认安装并启动的。

通过/etc/crontab文件,可以看到以下内容:

root@storage:/etc/cron.hourly# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
root@storage:/etc/cron.hourly#

ununtu 通过调用 run-parts 命令,定时运行四个目录下的所有脚本。

  1. /etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的2分钟时运行;
  2. /etc/cron.daily,目录下的脚本会每天让执行一次,在每天0点17分时运行;
  3. /etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的3点56分时运行;
  4. /etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月19号的5点32分时运行;

 当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改。

crontab 命令格式

crontab [ -u user ] [ -i ] { -e | -l | -r } //省略用户表示操作当前用户的crontab
          (默认操作是 replace)
    -e   (编辑用户的工作表)
    -l    (列出用户的工作表)
    -r    (删除用户的工作表)
    -i    (在删除用户的crontab文件时给确认提示)

首次使用 crontab 时,提示用户选择编辑器,如果选择错了可以执行 select-editor 命令重新选择

root@ubuntu:# crontab -e

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 3
root@B-OPS-68-1:~#

crontab 任务配置编写

crontab -e 进入当前用户的工作表编辑

crontab 的配置语法为 时间+动作,其时间有分、时、日、月、周 五种,每个时间注意用空格分开,动作就是你要执行的命令

minute(m)hour(h)day of month(dom)month(mon)day of week(dow)action
0-59 0-23 1-31 1-12 0-6 command

其中时间还可以使用下列特殊字符,更细致的设置时间

  • (*) 星号代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
  • (,) 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • (-) 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • (/) 可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

run-parts 系统默认的 hourly daily weekly monthly 四类定时任务不执行问题的解决

脚本文件需满足以下的条件

  • 脚本文件名的有效字符为 [a-zA-Z0-9_-] ,并且脚本文件不允许有扩展名
  • 脚本文件内容第一行必须有正确的文件头 #!/bin/bash

脚本文件完成后,使用 run-parts 进行测试

run-parts --test /etc/cron.hourly

如果测试结果显示之前配置的脚本文件名,则表明它可以工作。否则,如果不显示任何内容,则脚本无效。

Categories: ubuntu 工具技巧

Tagged as:

RoyAkon