今天需要在服务器上跑一个定时任务去清理日志,学习一下crontab命令


crontab 定时任务

crontab命令,允许固定的间隔时间执行指定的系统指令或脚本.时间间隔的单位可以是分钟,小时,日,月,周及以上的任意组合.

命令格式

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user  
 -e         edit user crontab 
 -l         list user crontab 
 -r         delete user crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users crontabs
 -c         get host in cluster to run users crontabs
 -s         selinux context
 -x <mask>  enable debugging

常用参数

  • -u user:用来设定某个用户的crontab服务;
  • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提示

cron表达式

crontab 命令常见于 Unix 和 类Unix 的操作系统之中,用于设置周期性被执行的指令

格式:[秒] [分] [时] [日] [月] [周] [年] 共 7 个子表达式, 用空格隔开

字段 是否必填 允许值 允许的特殊字符
0~59 ,-*/
0~59 ,-*/
0~23 ,-*/
1~31 ,-*?/LWC
1~12 或者 JAN-DEC ,-*/
1~7 或者 SUN-SAT ,-*?/LC#
empty,1970~2099 ,-*/

特殊字符

  • ”?” 字符:表示不确定的值
  • ”,” 字符:指定数个值
  • ”-” 字符:指定一个值的范围
  • “/” 字符:指定一个值的增加幅度。n/m 表示从 n 开始,每次增加 m
  • “L” 字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期 X
  • “W” 字符:指定离给定日期最近的工作日 (周一到周五)
  • ”#” 字符:表示该月第几个周 X。6#3 表示该月第 3 个周五

范例

  • 每隔5秒执行一次:*/5 * * * * ?
  • 每隔1分钟执行一次:0 */1 * * * ?
  • 每天23点执行一次:0 0 23 * * ?
  • 每天凌晨1点执行一次:0 0 1 * * ?
  • 每月1号凌晨1点执行一次:0 0 1 1 * ?
  • 每月最后一天23点执行一次:0 0 23 L * ?
  • 每周星期天凌晨1点实行一次:0 0 1 ? * L
  • 在26分、29分、33分执行一次:0 26,29,33 * * * ?
  • 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

实战

我的目的是每天的0点清空一个日志文件,先写一个脚本,是用来清空日志的

caobo@caobo-server:~$ cat clean.sh
#!/bin/bash
echo '' > /home/caobo/log

编写一个定时任务的文件

caobo@caobo-server:~$ cat cronjob
0 0 * * * ? /bin/bash /home/caobo/clean.sh

crontab命令读取这个文件

caobo@caobo-server:~$ crontab ./cronjob

然后查看已配置的定时任务

caobo@caobo-server:~$ crontab -l
0 0 * * * ? /bin/bash /home/caobo/clean.sh

完成!