Windows下有计划任务,Linux同样有这样的定时执行软件实现相同功能,而且更加简单。在Linux中通常通过crontab来实现这个功能。crontab其实分为两个部分cron和cron table,cron是计划任务的核心程序,而table是用于管理这些任务列表的工具。对应的,在系统中crond服务用来维护cron,可以使用service crond start/stop/restar/reload
来命令服务状态。接下来就介绍一下contab的使用吧。
安装crontab和启动服务
yum install vixie-cron yum install crontabs service crond start
使用crontab
crontab -l #查看已有的任务列表crontab -e #打开任务列表编辑器,修改任务列表,具体怎么编辑下一部分讲 service crond reload #重新载入任务列表
crontab任务列表
当使用crontab -e
打开任务列表编辑器时,按照vi的操作方式进行操作。每行代表一个计划,这个计划包含时间和要执行的任务,一共6列,前面5列和时间相关,最后一列是一个执行任务的语句(不是一个单词,可以是有空格的命令),执行该任务的用户是root(crond服务的用户)。
下面来详细讲解一下这6列:
0 * * * * servie httpd restart ① ② ③ ④ ⑤ -------⑥------------
上面这个任务表示,在每一个整点重启httpd服务。
① 表示每个小时的第n分钟,取值[0,59],比如填写10,就是表示每个小时的第10分钟;② 表示每天的第n个小时,取值[0,23],比如填写3,表示每天的3点钟,如果配合上面的10,就表示每天的3点10分会执行这个任务;③ 表示每月的日期,根据不同的月进行填写,[1,31],比如2月,就没有30,31④ 表示月份,取值[1,12]
上面这四个项合起来,就可以计划一个确定时间的计划,比如3月16日 16:16
,这个时间安排一个任务就可以实现了。
⑤ 表示星期几,取值[0,6],0表示星期天,一般星期和日期不能同时出现,比如星期填写6,就可以表示3月的每个星期6
这样的时间,如果和日期一起用,就会出现冲突,因为日期对应的星期可能不是我们填写的星期,当然,如果你确定的话,填写也没关系。
⑥ 表示要执行的任务内容,相当于一个Linux命令,就像上面例子里面的service httpd restart
,也可以是具体的某个可执行文件,比如.sh文件
其他格式解释:
- ,号表示一起使用,比如上面例子里,可以改成0,30 * *……,
0,30
的意思就是每小时的第0分钟和第30分钟会执行这个命令 - -号表示一个区间,比如上面的改为
0 3-5 * * *
3-5表示3,4,5,也就是说3-5之间任何一个可选的值都会用上 - *号表示这个位置的任何一个有效数字都会使用,比如上面的例子里,第一列是0,其他全是*,意思就是第二列[0,23]这24个数字全部用上
- /号表示“每隔”,和逗号连接号意义不同,比如我们改为
0 */2 * * *
*/2表示每隔两个小时执行一次,斜杠前面的值表示先限定一个区间,比如23-6/2表示在晚上11点到早上6点之间,每隔两个小时
我们来举一个例子,比如我希望服务器每隔15分钟访问一个URL,我们可以在contabs中加入如下任务:
*/15 * * * * curl http://yourdomain/uri
这样就可以实现一个基于URL的定时任务啦
2016-08-25 12821
这价值有点高啊
[…] 在Linux中,我们使用crontab来定时执行某些任务。在《linux计划任务crontab使用方法》一文中我已经详细讲了crontab的用法,就不再赘述如何创建定时任务。 […]
你好,请问 */15 * * * * curl http://yourdomain/uri 这个/uri 是必须要加的吗?
不用,后面仅仅是要访问的url地址
[…] 在Linux中,我们使用crontab来定时执行某些任务。在《linux计划任务crontab使用方法》一文中我已经详细讲了crontab的用法,就不再赘述如何创建定时任务。 […]