crontab入门及进阶学习笔记

时间:2023-03-09 17:50:00
crontab入门及进阶学习笔记

crontab不是通常意义下的linux指令,它更是一个配置工具。通过这个工具,我们可以为系统定制固定周期的任务。

1、crond和crontab

1)   crond:cron服务的守护进程,用于定期调度。

2)   crontab:cron提供的UI,用于编辑调度计划。

2、crontab指令:

crontab –e:编辑已有定期调度任务,注意:该指令会启动vi编辑器进行任务编辑。

crontab –l:显示已有定期调度任务。

3、cron任务格式:

使用crontab –e编辑定期调度任务时,实际上可以理解为编辑一个配置文件,通过这个文件定义要执行哪些定期任务,执行的周期如何。

编辑过程可以理解为:进入vi编辑界面,以一个工作代表一行来编辑,然后输入“:wq”保存即可。每项工作(每行)具有六个字段,各字段意义如下表所示,六个字段依次表示分钟、小时、天、月、周和要执行的shell命令。

代表意义

分钟

小时

日期

月份

指令

数字范围

0-59

0-23

1-31

1-12

0-7

指令

4、特殊字符的使用:

cron任务中,有时需要设置较为复杂的任务处理逻辑,此时可能会用到如下特殊字符:

特殊字符

代表意义

*(星号)

代表任何时候都接受。例如:30 10 * * * command中,day,month和week均为“*”,表示无论哪一天、哪个月、周几,都在10点30分执行命令。

,(逗号)

代表多个并列时间。例如:* 3,6,9,12 * * * command,表示在3点,6点,9点或12点,执行命令。

-(减号)

代表连续区间。例如:* 9-17 * * * command,表示从9点到17点,每一分钟都要执行这个任务。

/n(斜线)

代表每隔n个单位之间。例如:*/5 * * * * command,其中用*与/5来搭配,表示每隔5分钟执行指令;也可以写成 0-59/5 ,作用相同。

5、举例:

# 每周五17点整,提醒所有组员发周报:

>crontab –e #进入编辑界面

0 17 * * 5 mail all_members < weekily_report_notify

#每周一00:30统计上周的服务器使用情况,结果保存到以日期命名的文件:

>crontab –e #进入编辑界面

30 0  * * 1 /home/get_server_usage.sh> server_usage_`date +"\%Y\%m\%d"`.txt

#注意其中%的处理,需要在前面加反斜杠\进行转义。

6、注意事项:

P.S.: crontab命令中的待执行脚本最好使用绝对路径。

P.S.: “周”这一栏中0和7都代表周日。

P.S.: cron调度的最小频率为1分钟。

P.S.: 每个月的最后一日无法由crontab直接支持,需要通过脚本判断。

P.S.:如果crontab运行出错,可以查看日志文件/var/log/syslog,追溯问题。