Linux任务计划crontab和时间函数date

部分转自实验楼。

crontab 概况

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和实行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要实行。

通过 crontab 命令,大家可以在固定的间隔时间实行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

这里大家看一看crontab 的格式

Example of job definition:
.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name command to be executed
  • 第一列f1代表分钟1~59:当f1为*表示每分钟都要实行;为*/n表示每n分钟实行一次;为a-b表示从第a分钟到第b分钟这段时间要实行;为a,b,c,...表示第a,b,c分钟要实行
  • 第二列f2代表小时0~23(0表示凌晨):当f2为*表示每小时都要实行;为*/n表示每n小时实行一次;为a-b表示从第a小时到第b小时这段时间要实行;为a,b,c,...表示第a,b,c小时要实行
  • 第三列f3代表日1~31:含义如上所示,以此类推
  • 第四列f4代表月1~12:含义如上所示,以此类推
  • 第五列f5代表星期0~6(0表示星期天):含义如上所示,以此类推
  • 第六列command代表要运行的命令

下面将开始 crontab 的使用了,大家通过下面一个命令来添加一个计划任务

$ crontab -e

第一次启动会出现这样一个画面,这是让大家选择编辑的工具,选择第二个基本的 vim 就可以了:

image.png

而选择后大家会进入这样一个画面,这就是添加计划的地方了,与一般的配置文档相同,以#号开头的都是注释:

image.png

rontab文件的一些例子:

  • 30 21 * * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每晚的21:30重启apache。

  • 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每月1、10、22日的4 : 45重启apache。

  • 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每周六、周日的1 : 10重启apache。

  • 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

  • 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每星期六的11 : 00 pm重启apache。

  • * */1 * * * /usr/local/etc/rc.d/lighttpd restart
    每一小时重启apache

  • * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    晚上11点到早上7点之间,每隔一小时重启apache

  • 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    每月的4号与每周一到周三的11点重启apache

  • 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
    一月一号的4点重启apache

  • crontab [-u user] -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件内容。
  • crontab [-u user] -l:显示某个用户的crontab文件内容。如果不指定用户,则表示显示当前用户的crontab文件内容。
  • crontab [-u user] -[i]r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。-i参数指定在删除用户的crontab文件时是否给确认提示。

Linux date命令

  • 时间方面:
    % : 印出 %
    %n : 下一行
    %t : 跳格
    %H : 小时(00..23)
    %I : 小时(01..12)
    %k : 小时(0..23)
    %l : 小时(1..12)
    %M : 分钟(00..59)
    %p : 显示本地 AM 或 PM
    %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
    %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
    %S : 秒(00..61)
    %T : 直接显示时间 (24 小时制)
    %X : 相当于 %H:%M:%S
    %Z : 显示时区
  • 日期方面:
    %a : 星期几 (Sun..Sat)
    %A : 星期几 (Sunday..Saturday)
    %b : 月份 (Jan..Dec)
    %B : 月份 (January..December)
    %c : 直接显示日期与时间
    %d : 日 (01..31)
    %D : 直接显示日期 (mm/dd/yy)
    %h : 同 %b
    %j : 一年中的第几天 (001..366)
    %m : 月份 (01..12)
    %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
    %w : 一周中的第几天 (0..6)
    %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
    %x : 直接显示日期 (mm/dd/yy)
    %y : 年份的最后两位数字 (00.99)
    %Y : 完整年份 (0000..9999)

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

使用权限:所有使用者。

当您不希翼出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。

当您以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

实例

$ date
三 5月 12 14:08:12 CST 2010
$ date '+%c' 
2010年05月12日 星期三 14时09分02秒
$ date '+%D' //显示完整的时间
05/12/10
$ date '+%x' //显示数字日期,年份两位数表示
2010年05月12日
$ date '+%T' //显示日期,年份用四位数表示
14:09:31
$ date '+%X' //显示24小时的格式
14时09分39秒
$ date '+usr_time: $1:%M %P -hey'  //按自己的格式输出
usr_time: $1:16 下午 -hey

推荐阅读更多精彩内容