码迷,mamicode.com
首页 > 其他好文 > 详细

计划任务

时间:2019-12-15 18:15:05      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:进入   数字   height   参数   建立   个人   脚本   配置文件   lsp   

(整理自《鸟哥的Linux私房菜》基础篇)

1.两种计划任务的方式

•        一种是例行性的,就是每隔一定的周期要来办的事项;

•        一种是突发性的,就是这次做完以后就没有的那一种

at :at 是个可以处理仅执行一次就结束排程的指令,不过要执行 at 时, 必须要有 atd 这个服务 的支援才行

crontab :crontab 这个指令所设定的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务。

 

2.仅执行一次的计划任务

2.1atd 的启动与 at 运作的方式

要使用单一工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩意儿。 不过并非所有的 Linux distributions 都预设会把他打开的,所以呢,某些时刻我们必须要手动将他启用才行。 启用的方法很简单,就是这样:

 技术图片

 

 

 重点就是要看到上表中的特殊字体,包括『 enabled 』以及『 running 』时,这才是 atd 真的有在运作的意思.

 

事实上,我们使用 at 这个指令来产生所要运作的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了。

at 的工作情况其实是这样的:

1.     先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

2.     如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;

3.     如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。

 

万一我下达了 at 之后,才发现指令输入错误,该如何是好?就将他移除啊!利用 atq 与 atrm 。

 技术图片

 

 

 2.2  batch:系统有空时才进行计划任务

batch 神奇的地方在于:他会在 CPU 的工作负载小于 0.8 的时候,才进行你所下达的工作任务。

 技术图片

 

 

 使用 uptime 可以观察到 1, 5, 15 分钟的『平均工作负载』量,因为是平均值,所以当我们如上表删除掉四个工作后,工作负载不会立即降低, 需要一小段时间让这个 1 分钟平均值慢慢回复到接近 0 啊!当小于 0.8 之后的『整分钟时间』时,atd 就会将 batch 的工作执行掉。

 

3.循环执行的例行性计划任务

循环执行的例行性工作排程则是由 cron (crond) 这个系统服务来控制。

3.1使用者的设定

•        /etc/cron.allow:

将可以使用 crontab 的账号写入其中,若不在这个文件内的使用者则不可使用 crontab;

•        /etc/cron.deny:

将不可以使用 crontab 的账号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。同样的,以优先级来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 一般来说,系统默认是保留 /etc/cron.deny.

 

crontab 的语法:

 技术图片

 

 

 预设情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『 crontab -e 』去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入『 :wq 』储存后离开 vi 就可以了! 而每项工作 (每行) 的格式都是具有六个字段,这六个字段的意义为:

代表意义

分钟

小时

日期

月份

指令

数字范围

0-59

0-23

1-31

1-12

0-7

呀就指令啊

比较有趣的是那个『周』!周的数字为 0 或 7 时,都代表『星期天』的意思!另外,还有一些辅助的字符,大概有底下这些:

特殊字符

代表意义

*(星号)

代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表着『不论何月、何日的礼拜几的 12:00 都执行后续指令』的意思!

,(逗号)

代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:

0 3,6 * * * command

时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!

-(减号)

代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:

20 8-12 * * * command

仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!

/n(斜线)

那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:

*/5 * * * * command

很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

如何查询使用者目前的 crontab 内容呢?我们可以这样来看看:

 技术图片

 

 

 3.2系统的配置文件: /etc/crontab, /etc/cron.d/*

 cron 这个服务的最低侦测限制是『分钟』,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的数据内容 .

我们来看一下这个 /etc/crontab 的内容:

 技术图片

 

 这个文件与将刚刚我们下达 crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同:

o   MAILTO=root:

当 /etc/crontab 这个文件中的例行性工作的指令发生错误时,或者是该工作的执行结果有 STDOUT/STDERR 时,默认会将错误讯息或者是屏幕显示的讯息由系统

直接寄发一封 mail 给 root。

o   PATH=....:

就是输入执行文件的搜寻路径!使用默认的路径设定就已经很足够了!

o   『分 时 日 月 周 身份 指令』七个字段的设定

这个 /etc/crontab 里面可以设定的基本语法与 crontab -e 不太相同!前面同样是分、时、日、月、周五个字段, 但是在五个字段后面接的并不是指令,而是一个新的字段,那就是『执行后面那串指令的身份』为何!这与使用者的 crontab -e 不相同。由于使用者自己的 crontab 并不需要指定身份,但 /etc/crontab 里面当然要指定身份!以上表的内容来说,系统默认的例行性工作是以 root 的身份来进行的。

3.3crond 服务读取配置文件的位置

一般来说,crond 预设有三个地方会有执行脚本配置文件,他们分别是:

•        /etc/crontab

•        /etc/cron.d/*

•        /var/spool/cron/*

 

最后,让我们总结一下:

•        个人化的行为使用『 crontab -e 』:如果你是依据个人需求来建立的例行工作排程,建议直接使用 crontab -e 来建立你的工作排程较佳! 这样也能保障你的指令行为不会被大家看到 (/etc/crontab 是大家都能读取的权限喔!);

•        系统维护管理使用『 vim /etc/crontab 』:如果你这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入 /etc/crontab 较佳!

•        自己开发软件使用『 vim /etc/cron.d/newfile 』:如果你是想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于 /etc/cron.d/ 目录内即可。

•        固定每小时、每日、每周、每天执行的特别工作:如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。 如果想要偷懒,或者是一定要再某个周期内进行的任务,也可以放置到上面谈到的几个目录中,直接写入指令即可!

 

4. 注意事项

周与日月不可同时并存:

你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。比如:

 技术图片

 

 本来你以为九月十一号且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,如此一来与你当初的规划就不一样了。

 

5.可唤醒停机期间的工作任务

使用 anacron命令,语法:

 技术图片

计划任务

标签:进入   数字   height   参数   建立   个人   脚本   配置文件   lsp   

原文地址:https://www.cnblogs.com/ericz2j/p/12045245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!