linux之定时任务

crontab简介

Linux crontab是用来定期执行程序的命令;当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

而linux任务调度的工作主要分为以下两类:

  1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;

  2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。

语法

1  crontab [ -u user ] file
2 
3 或者是
4 
5 crontab [-u user] {-l,-e,-r}

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

-l:列出目前的时程表

-r:删除目前的时程表

-e(编辑):执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

具体写定时器任务

1 minute  hour  day   month  week   command

minute:标识分钟,范围0-59

hour:标识小时,0-23,那个小时

day:标识天,0-31,那天

month:标识年,0-12,那个月

week:标识周,0-7,也就是星期几,这里的0或7代表星期日

command:就是要执行的命令,可以使linux的操作命令或服务命令,也可以是shell脚本

还可以使用一下特殊的字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作;

逗号(,):可以用逗号隔开列表的指定范围,例如:1,2,3,4,5,6;如果是分钟,在一分钟-6分钟都要执行这个命令;

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“1-6”表示1,2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

具体实例

实例1:每一分钟执行一次命令

1 * * * * * command

实例2:每小时的第3和第15分钟执行一次命令

1 3,15 * * * * command

实例3:在上午的8点到11点的,第3分钟和第15分钟进行实行一次

1 3,15 8-11 * * * command

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

1 3,15 8-11 */2 * * command

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

1 3,15 8-11 * * 1 command

实例6:每晚的0:30重启nginx

1 30 0 * * * systemctl restart nginx

注意事项

1、新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行;

2、当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron;千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了;在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。

3、系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

原文地址:https://www.cnblogs.com/meichao/p/9516107.html