Linux下怎么来利用crontab实现计划任务

前言

Crontab是Linux下常用的的,用来设置周期性实践命令的工具。利用这些工具,能够协助大家制定铺排任务,对于系统一管理理员来说,特别实用。开垦顺序中,作者也常用这些工具在早上按期备份数据库,程序代码等。

rule.minute 是帮衬数组的
http://www.99css.com/node-schedule-tips/

一、基本语法

(1)Cron表明式是四个字符串,字符串以5或6个空格隔绝,分为6或7个域,每三个域代表一个意思,Cron有如下三种语法格式:

Seconds Minutes Hours DayofMonth Month DayofWeek Year; 
Seconds Minutes Hours DayofMonth Month DayofWeek;

(2)每多个域可出现的字符如下:

  • Seconds:可出现”, - * /”三个字符,有效限制为0-59的整数

  • Minutes:可出现”, - * /”七个字符,有效限制为0-59的整数

  • Hours:可出现”, - * /”多个字符,有效限制为0-23的寸头

  • DayofMonth:可出现”, - * / ? L W C”多个字符,有效限制为0-31的整数

  • Month:可出现”, - * /”几个字符,有效限制为1-12的卡尺头或JAN-DEc

  • DayofWeek:可出现”, - * / ? L C #”七个字符,有效限制为1-7的子弹头或

  • SUN-SAT五个范围。1代表周日,2意味着星期一, 依次类推Year:可出现”, - * /”七个字符,有效限制为1966-2099年

(3)符号含义:

  • (星号) 表示十一分该域的放肆值,假使在Minutes域使用, 即表示每分钟都会接触事件;

  • ,(逗号) 表示列出枚举值值。举例:在Minutes域使用5,20,则代表在5和20分每分钟触发叁次,再比如作者想每小时的30分和59分施行命令为 30,59 * * * * date > /home/text.txt

  • -(减号) 四个小时段内举办职责,譬喻每时辰的3-10分实践命令为3-10 * * * * date > /home/text.txt

  • /(斜线) 表示初步时间早先接触,然后每隔固按期直接触一回,比方在Minutes域使用5/20,则意味5分钟触发三回,而25,45等各自触发贰遍,举个例子上例:/1 * * * date > /home/text.txt 正是每隔1秒钟试行一下下令;

  • ?(问号) 只好用在DayofMonth和DayofWeek三个域。它也相称域的自便值,但实则不会。因为DayofMonth和DayofWeek会互相影响。举例想在每月的27日接触调解,不管30日到底是星期几,则不得不采纳如下写法: 13 13 15 20 * ?, 个中最后一人只可以用?,而无法选择,如若运用表示不管星期几都会触发,实际上并非这么。

  • W(W) 表示有效职业日(周四到周二),只好出现在DayofMonth域,系统就要离钦定日期的方今的可行专门的学问日触发事件。例如:在 DayofMonth使用5W,假诺5日是周末,则将要不久前的职业日:周一,即4日触及。假使5日是周天,则在6日(周五)触发;即使5日在周三到星期一中的一天,则就在5日接触。别的一些,W的近年搜索不会跨过月份 。

  • LW(LW) 那五个字符能够连用,表示在有个别月最终两个专门的职业日,即最终二个礼拜三。

  • #(#) 用于分明各种月第多少个星期几,只可以出现在DayofMonth域。举个例子在4#2,表示某月的第一个星期一。

(4)举多少个例子:

0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务 
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业 
0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时 
0 0 12 ? * WED 表示每个星期三中午12点 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

1.递归法规电磁打点计时器

周二到周天,18点0分0秒早先

var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(1, 6)];
rule.hour = 18;
rule.minute = 0;
rule.second = 0;
var j = schedule.scheduleJob(rule, function(){
    console.log('Today is recognized by Rebecca Black!');
});

二、Crontab命令参数表达

crontab -[ler]

l:list,列出计划任务   
e:edit,编辑计划任务   
r:remove,移除所有计划任务   

2.Cron表明式计时器

var schedule = require('node-schedule');

var j = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

Cron表达式:

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    |
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

每二个域可出现的字符如下:

Seconds:可出现”, – * /”四个字符,有效限制为0-59的大背头

Minutes:可出现”, – * /”多少个字符,有效限制为0-59的整数

Hours:可出现”, – * /”八个字符,有效限制为0-23的卡尺头

DayofMonth:可出现”, – * / ? L W C”八个字符,有效限制为0-31的平头

Month:可出现”, – * /”八个字符,有效限制为1-12的整数或JAN-DEc

DayofWeek:可出现”, – * / ? L C #”八个字符,有效限制为1-7的整数或SUN-SAT三个范围。1意味着星期六,2意味周二, 依次类推

Year:可出现”, – * /”多少个字符,有效限制为一九六九-2099年

每几个域都使用数字,但还足以出现如下特殊字符,它们的意义是:

(1) *:表示特别该域的任性值,即便在Minutes域使用, 即表示每分钟都会接触事件。

(2)?:只可以用在DayofMonth和DayofWeek八个域。它也相配域的任性值,但其实不会。因为DayofMonth和DayofWeek会相互影响。举个例子想在每月的二十十三日触及调治,不管27日毕竟是星期几,则只可以采取如下写法: 13 13 15 20 * ?, 其中最终一个人只好用?,而不可能使用,假设利用代表不管星期几都会接触,实际上实际不是这么。

(3)-:表示范围,譬如在Minutes域使用5-20,表示从5分到20分钟每分钟触发贰遍

(4)/:表示起首时间开端接触,然后每隔固定时期接触壹次,举例在Minutes域使用5/20,则意味5分钟触发二回,而25,45等分头触发一回.

(5),:表示列出枚举值值。举个例子:在Minutes域使用5,20,则表示在5和20分每分钟触发三遍。

(6)L:表示最后,只可以出现在DayofWeek和DayofMonth域,假如在DayofWeek域使用5L,意味着在终极的三个周二触及。

(7)W:表示有效工作日(周五到周二),只好出现在DayofMonth域,系统就要离钦定日期的近年的有用专门的学问日触发事件。比方:在 DayofMonth使用5W,假若5日是周天,则将要前段时间的专门的学问日:星期一,即4日接触。借使5日是星期天,则在6日(周一)触发;若是5日在周三到周一中的一天,则就在5日触及。别的一些,W的近年寻找不会跨过月份

(8)LW:那三个字符能够连用,表示在有些月最后三个专业日,即最终多个星期一。

(9)#:用于明确各种月第几个星期几,只好出现在DayofMonth域。比如在4#2,表示某月的第4个星期五。

果然,借使某些设定值设为「」,则意味相称狂妄值,在秒和分钟上则反映为每分每秒都接触。后将Cron表明式改为「0 0 8 * 」,难题消除。留神一想,那也很好掌握,「」日常作为全相称用,像天,月,年这样的大家要是设做「*」,会认为是 是每一日每月每年都实践,同理 在秒和分钟也应有如此。

三、命令测验

1、编辑安排职分

crontab -e:编辑安排任务,其实正是编辑二个安排任务的文本,一行三个安插职责。

每行的格式如下:

# m h dom mon dow command

各位表明:

m:minute 分钟 (0-59)  
h:hour 小时 (0-23)    
dom:日 (1-31)    
mon:month 月 (1-12)  
dow:周 (0-7,其中0和7都代表星期天) 
command:执行的命令   

岁月的不大单位是分钟,为了测验出结果,笔者使用每分钟将近期时刻保存到/home/text.txt下来进行测验:

*/1 * * * * date > /home/text.txt

意义:等待一分钟,检查下/home/text.txt文件,如果有看齐时间就马到成功了。除了*号和/符号还会有别的符号来设定期间:

2、查看职务列表

crontab -l:这一个命令能够查看安插职责列表,其实便是查看职责文件了。

3、删除布置义务

crontab -r:那几个命令建议不要用,这些命令会删除系统上的具有计划任务,笔者曾经在服务器上误删除了三次,结果花了无数岁月回复。提议通过crontab -e编辑,直接删除无需的那一行,就能够了。

友情提示:

实践的命令中的路线建议利用全路径,这样自然不会反常。比方作者上例就是直接采取/home/text.txt;

Linux中央银行使crontab创造布署任务 http://www.linuxidc.com//Linux/2013-06/86401.htm

Linux中用crontab例行工作安顿 http://www.linuxidc.com//Linux/2013-06/85441.htm

Linux crontab不推行问题排查 http://www.linuxidc.com//Linux/2013-06/85432.htm

Ubuntu选择crontab定时任务 http://www.linuxidc.com//Linux/2013-05/84770.htm

Linux布置职责(at batch crontab anacron) http://www.linuxidc.com//Linux/2013-03/81584.htm

Linux任务布署 (at,crontab) http://www.linuxidc.com/Linux/2015-09/122970.htm

正文长久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128638.htm

图片 1

3.停止

var schedule = require('node-schedule');
var moment = require("moment");

let cancelRule = new schedule.RecurrenceRule();
cancelRule.hour = 15;
cancelRule.minute = 52;
cancelRule.second = 30;
var j = schedule.scheduleJob('1-59 * * * * *', function () {
    console.log('定时器触发时间:' + moment().format());
});

var k = schedule.scheduleJob(cancelRule, function () {
    console.log('定时器取消' + moment().format())
    j.cancel();
})

本文由365bet体育在线官网发布于365bet,转载请注明出处:Linux下怎么来利用crontab实现计划任务

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。