您的位置:首页 > 其它

任务计划cron

2013-04-02 19:16 288 查看
本文中有很多红色字体,要特别的,如果是红色加粗的,那要重点注意一下(除了这一句)。

我们讲的是任务计划,很多时候我们将执行任务的任务写成了脚本,但是我们并不期望这个脚本立即生效,而是安排在未来某个时间运行,这种机制叫做任务计划【提示:任务计划计划的一定是未来的时间】

任务计划有两种:
1、 在未来的某个时间点执行一次某任务
at + 时间 : at加时间回车就行
at>COMMAND :出现at>,这时候我们需要输入我们期望要执行的命令(可以写写多个)
at>Ctrl +d : 提交(这个样子就可以在设定的时间段上执行我们的命令)
指定时间的方法:
①绝对时间:HH:MM(小时:分钟) DD.MM.YY(日.月.年)MM/DD/YY(月/日/年)
#:# 表示#点#分 例如:10:20 表示10点20分
如果给你一个时间,没有年月日,执行那个时间一定是今天的吗?
答:不一定,如果给了08:12,而现在时间是12:00 ,因为今天的8:12已经过去了,所以这次执行是明天早上08:12点。【提示:这个题的意思就是如果这个时间过了,那就是下一个时间执行】
②相对时间:now+# 后面跟着时间(表示#时间以后)
常用的单位有: minutes,hours,day, weeks
例如:now+1m 表示1分钟以后





at -l =atq 查看作业





at -d =AT_JOB_ID 和atrm AT_JOB_ID是一样删除作业用的。





③模糊时间:noon,midnight,teatime
命令的执行结果:将以邮件的形式发送给安排任务的用户。





batch:
特性:是在系统比较空闲的时候自动执行这个任务。
和at的比较:
不同点:在于不需要指定时间。
相同点:也是执行一次,还有其他特性
定义用户安排任务计划的权限。
在/etc下面有个文件叫做at.deny。我们在/etc下面可以创建两个文件,一个叫at.allow是允许,我们可以称作为白名单,另一就是at.deny,是不允许,我们可以称作为黑名单。如果只有at.deny存在,at.allow不存在,只有at.deny里面的用户不能使用at,其它的用户都能使用at;如果at.allow存在,at.deny不存在,那么只有at.allow里面的用户才能使用at,其它的用户都不能使用at;但是如果两个文件都存,只有at.allow生效(只能在at.allow里面的用户使用at);如果两个用户都不存在,只有root用户才能使用at。如果有at.deny,但是为空,那意味着什么?意味着所有的用户都能用at;如果有at.allow,但是为空,意味着除了管理员所有用户不能使用at。
2、周期性的执行某任务
Cron也是在安排某个任务在将来某个时间点执行,但是cron可能在某个时间点都能执行。自身是一个不间断运行的服务 。但是如果我们的linux关机了怎么办,很显然,cron也没法工作,cron所安排的周期性任务也无法运行了。例如:我们定义在今年的5月10日凌晨1点整理文件碎片,而到了5月10日0点的时候关机了,这时候的整理文件碎片就没法执行了。到了5月10日上午9点开机了,那个任务将不会被执行,除非等到下个时间点。Cron的假设前提运行在一个长时间不会关机的服务器上。
anacron:这是cron的补充,能够实现让cron因为各种原因在过去的时间能够执行而未执行的任务再恢复正常执行一次。(我们的服务器时时在线的,一般来讲cron也在线的,不会有任务略过去的所以在服务器上,anacron基本上,是不启动的)
cron:
1、系统cron任务:跟用户没有关系,是我们操作系统自身为了周期性的维护某一个操作或任务而专门安排的。
定义在/etc/crontab当中
分钟 小时 天 月 周 用户 任务 【提示:前五个段指的是时间,中间用空格隔开】
/etc/crontab当中的内容是:【密令参数作用:可以实现运行这个目录的每一个脚本或者命令】





我们找一个每天任务进行查看,在/etc/cron.deny里面都是脚本,这些脚本就是实现系统自身维护的。如果一起运行,这样我们的系统就变的非常忙碌了,为了避免这样的问题,我们就要安排次序,命令就是执行完一个执行下一个,要想让一个排到最前面,我们就把那个前面加个0,如果不加,那就按照首字母前后进行排序,如果相同就看第二位字母的顺序,一次类推。





2、用户cron任务:
定义在/var/spool/cron/USRENAME
分钟 小时 天 月 周 任务 【提示:这里面没有用户了】
我们在/var/spool/cron/目录下,如果有用户定义了,他就会有一个文件跟用户名同名的文件。【建议:一般建议不直接在里面创建,主要是怕写的语法有问题,时间到了不执行怎么办?】,这里我们有专门的命令去定义cron,叫做crontab。
时间的有效取值;
分钟:0-59
小时:0-23
天 :1-31
月 :1-12
周 :0-7,0和7都表示周日
时间通配表示:【提示:一般日和周不同时使用】
*:对应时间的所有有效取值。
例如:
3 * * * *每小时的第三分钟一次执行一次『循环1小时1次』
3 * * * 7每周日的每小时的第三分钟执行一次
13 12 * * *每天的12点13分执行一次『循环1天1次』
13 12 * * 5每周5的12点13分执行一次『循环1周1次』
13 12 6 * *每月6日12点13分执行一次『循环1月1次』
13 12 6 * 3每月6日且周3的12点13分执行一次『循环1天1次』【提示:这样的概率非常小,一般不这样用,这里只是给大家举个例子。】
13 12 6 7 *每年7月6日12点13分执行一次『循环1年1次』
,:离散时间点:
10,40 * * * * 每小时的第10分钟和第40分钟执行一次,一小时执行一次[半小时任务]
10,40 * * *2,5 每周二和周五的每小时的10分到40分执行
10,40 02 * *2,5 每周二和周五的2点的10分到40分执行
-:连续时间点;
10 02 * * 1-5每周从周一到周五的2点10各执行一次
/#:对应取值范围内每多久一次【提示:每个比它小的都要给它个具体值】
*/3 * * * * 每3分钟执行一次
08 */2 * * * 每2小时执行一次
10 04 */2 * * 每2天执行一次
执行结果将以邮件的形式送给管理员:【提示:如果我们不想让它发给我们该怎么办,我们就把它的结果懂到/dev/null】
例如:*/3 * * * * cat /etc/fstab &> /dev/null
Cron的环境变量:cron执行的所有命令都去PATH环境变量指定的路径下去找。
PATH /bin:/sbin:/user:/bin:/usr/sbin
如果你这里写的命令放到了其他位置,而你以用户的身份执行,它未必以cron方式执行。因此一般情况下我们都使用绝对路径。上面那一道题应该这样写(这里红色加粗字体就是改动的地方)
*/3 * * * */bin/cat /etc/fstab &> /dev/null
如果我们这里使用的是一个脚本呢,脚本当中有那么多的命令我们每一个命令都要写绝对路径,是不是很烦呀,我们可以在脚本当中定义PATH变量就行了。运行脚本的时候它就用自己的环境变量而不使用其他人的环境变量了。
用户任务管理:
Crontab
-l:列出当前用户的所有cron任务
-e:编辑
-r:移除所有任务
-u USERNAME :管理其用户的cron任务
例如:我们crontab –e编辑 */1 * * * * /bin/echo "how are you!" ,这个结果会放在我们的邮件里,它会1分钟给我们发一个邮件。如果我们写错它就会提示我们。





我们使用crontab –r可以移除任务




我们使用crontab –u USERNAME 就以这个用户的身份去编辑了。例如:我们创建一个用户tom。并且以tom的什么进行编译。Crontab –u tom –e


anacron:在/etc/anacrontab里面,分为四段,第一段和第二段都为时间,但是第一段是每多长时间执行一次,而第二段则是由于前面的没有执行,所以在开机后多少分钟进行执行。第三段是注释信息,第四段是执行任务。





注意:要想使用cron命令,先确保你的cron服务一定要运行【anacrontab也一样】



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  crontab at 任务计划 cron