Linux指令之 Crontab定时任务调度 1

1. 定义和基本语法

  • 定时任务调度: 指的是系统定期的在某个时间执行特定的命令或程序.
  • 任务调度的分类:
    1. 系统工作: 有些重要的工作必须周而复始的执行, 比如病毒扫描;
    2. 个别用户工作: 个别用户可能希望执行某些程序, 比如对mysql数据库的备份;

基本语法:

		crontab [-u user] file
		crontab [ -u user ] [ -i ] { -e | -l | -r }

常用选项:

crontab选项功能说明
-u user用户设定某个用户的Crontab服务
-e编辑某个用户的crontab文件内容,如不指定用户则表示当前用户
-l列出任务调度-----查询某个用户的crontab文件内容,如不指定用户则表示当前用户;
-r终止任务调度----从/var/spool/cron目录中删除某个用户的crontab文件, 不指定用户则为当前用户
-i在删除用户的crontab文件时给出确认提示

注意: 如果只是简单的任务,我们只需直接在crontab中加入任务即可, 对于比较复杂的任务, 需要些脚本(shell 编程)

2.Crontab的使用

2.1 Crontab的类别和注意事项

  1. Linux下的任务调度非为两类: 系统任务调度和用户任务调度. Linux系统任务是由cron(crond) 这个系统服务来控制的,并且这个系统服务是默认启动的. 用户自己设置的计划任务则使用的是 crontab命令.
  2. 简而言之, 对于定时任务调度, 如果是系统级别的例行性任务, 使用 vi /etc/crontab , 如果是用户自定义的定时任务, 那么直接使用 crontab -e
  3. 所有用户定义(也包括root)的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
  4. 需要注意的是:crontab -e的作用其实是/usr/bin/crontab这个执行文件,而/etc/crontab是个纯文本文件,可以root的身份直接编辑这个文件。

crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行。
新创建的cron job不会马上执行,至少要等2分钟才能执行,可重启cron来立即执行。

%在crontab文件中表示“换行”,因此假如脚本或命令含有%,需要使用%来进行转义。

2.2 Crontab命令中的格式说明

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

分 时 日 月 周 命令
在这里插入图片描述

在以上各个字段中,还可以使用以下特殊字符:

  1. "*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
  2. "/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
  3. "-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
  4. ","分散的数字(不一定连续),如1,2,3,4,7,9。

注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。
在这里插入图片描述

3. 栗子堆

3.1 crontab关于时间格式的例子:

记住这句话: 分 时 日 月 周
* 默认就是 /1
周与日月不可同时并存

案例1:1分钟执行一次myCommand
* * * * * myCommand

案例2: 每小时的第3和第15分钟执行myCommand
3,15 * * * *  myCommand

案例3: 在上午8点到11点的第3和第15分钟执行myCommand
3,15 8-11 * * *  myCommand

案例4: 每隔两天的上午8点到11点的第3和第15分钟执行myCommand
3,15 8-11 */2 * *  myCommand

案例5: 每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1

案例6: 每晚的21:30重启smb
30 21  * * * /etc/init.d/smb restart

案例7: 每月11022日的4 : 45重启smb
45 4 1,10,22 * *  /etc/init.d/smb restart

案例8: 每周六、周日的1 : 10重启smb
10 1  * * 6,7 /etc/init.d/smb restart

案例9: 每天18 : 0023 : 00之间每隔30分钟重启smb
0,30 18-23 * * *  /etc/init.d/smb restart

案例10: 每星期六的晚上11 : 00 pm重启smb
* 23 * * 6 /etc/init.d/smb restart

案例11: 每一小时重启smb
0 * * * * /etc/init.d/smb restart

案例12: 晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart

要特别注意上面例子中 11,12两个, 每一小时的间隔, 没说每分钟, 那么就要把分钟对应的置为0
在这里插入图片描述

posted @ 2022-05-26 20:31  青松城  阅读(102)  评论(0编辑  收藏  举报