任务计划
1、概念:
很多时候我们将系统执行的任务写成了脚本,但是我们并不期望这个脚本立即执行,而是安排在未来的某个时间运行的话,这种机制我们就叫任务计划。所以任务计划必须是未来的事情,而Linux的计划任务是系统管理方面的一个重要内容,是系统自动完成工作的一种实现方式,正因为有了计划任务,我们才可以完全实现系统管理的脚本化和自动化。关于计划任务,Linux根据用户需要提供了两种服务,一种是atd服务,另一种是cron服务。其中atd服务中我们经常要使用到的是at命令,与at命令相关的有/etc/at.deny 和/etc/at.allow两个文件用来过滤哪些用户可以使用at命令。Linux 预设情况下,只有/etc/at.deny 这个文件,且这个文件内容为空,由于内容没有任何使用者,所以所有人都可以使用at命令。如果不想要某个使用者使用at时,那么将该使用者登录用户名写到/etc/at.deny 这个文件中即可。Linux系统中还可以自行创建/etc/at.allow文件,使得写在这个文件中的使用者才能使用at,没有在这个文件中的使用者则不能使用at ( 即使没有写在at.deny 当中)。如果这两个文件都不存在,那么只有root可以使用at命令。
1.1、在未来的某个时间点执行一次某任务:
有两个命令at和batch,这里我们只讲at。at:从名字上我们就可以看出是指时间点的,因此我们使用at后跟时间点即可,按Enter,会给你一个at提示符,如:在提示符下输入我们要执行的命令
at> COMMAND
at>Ctrl +d(提交)这样就可以在某个时间点去执行了,注意:这个时间必须是未来的时间。
1.2/指定时间的方法:
绝对时间: HH:MM,DD:MM:YY,MM/DD/YY
相对时间:now+# ——》 now+3minutes
单位:minutes,hours,days,weeks
模糊时间:noon,midnight,teatime(下午4点)
命令的执行结果:将以邮件的形式发送给安排任务的用户
at -l = atq :显示自己的任务列表
at -d AT_JOB_ID = atrm AT_JOB_ID:删除某个作业
2、例题:
用at执行两个作业
at now+3minutes
at> ls /var
at> cat /etc/fstab
at> <EOF>
at now+10minutes
at> cat /etc/issue
at> <EOF>
用at -l:查看作业
at -d 2:删除2号作业
service sendmail restart:重启mail进程
mail:可以查看邮件
ls /etc/at.deny:设定权限的文件,有白名单(at.allow)和黑名单(at.deny)如果两个文件都存在,执行白名单里的内容;如果两个都不存在,只有root用户有执行权限;如果黑名单存在,但为空,那所有人都允许;反之亦然。
3、周期性地执行某任务:
必须实现以服务的方式,不停地监控某些脚本或任务的执行情况,这时我们就要使用到cron服务。cron:自身是一个不间断运行的服务(运行在至少长时间不会关机的服务器上),如果某个任务因为某种原因略过去了,那将不再执行,除非到下个与之相同的时间点才会执行。如我们每天凌晨2点升级一个病毒库,每天都是那时关机,那它什么时候也不会升级,除非你在那个时间点没有关机。anacron是cron的补充,能够实现让cron因为各种原因在过去的时间点该执行而未执行的任务,在恢复正常时正常执行一次,anacron也是一种服务器,在服务器上,只要你的服务器不经常关机,一般来说都是随机运行的。因此anacron本身也必须要随时在线执行,这种在线指的是你的笔记本开机后能启动来就行了,一般只在笔记本上启动anacron,在服务器上是不需要启动的。crond服务是linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
你也可以让这个服务在系统启动的时候自动启动,只需要在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service crond start
3.1、Cron分两类:
一类是系统cron任务:系统周期性所要执行的工作,如备份系统数据、清理缓存。跟用户没有关系,是我们操作系统自身为了周期性维护某一个操作或任务而专门安排的,都定义在/etc/crontab(有7个段,5个段指时间,一个段指用户,一个段指运行的任务)如:分钟 小时 天 月 周 用户 任务(每个段使用空格隔开);另一类是用户cron任务:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。都定义在/var/spool/cron/USERNAME(有6个段,5个段指时间,一个段指运行任务)如:分钟 小时 天 月 周 任务
3.2、时间的有效取值:
crontab表中计划任务的书写格式:分钟 小时 日 月 周 [用户名] 命令
第一个字段:分钟,表示从一个小时的第几分钟来执行,范围:0~59;
第二个字段:小时,表示从一天的第几个小时来执行,范围:0~23;
第三个字段:天,表示从一个月的第几天来执行,范围:1~31;
第四个字段:月,表示从一年的第几个月来执行,范围:1~12;
第五个字段:周,表示从一周的第几天来执行,范围0~7,其中0和7都表示表示周日;
第六个字段:用户名,也就是要通过哪个用户来执行程序,一般可以省略;
第七个字段:执行的命令和参数。
3.3、时间通配表示:
*:对应取值的所有有效取值,如:
3 * * * * (每小时第三分钟)
3 * * * 7(每周日的每小时的第三分钟)
13 12 6 7 *:每年7月6号12点13分钟执行
注意每天和每周不会同时使用
,:离散时间点
10,40 * * * 2,5(每周二和周五的每小时执行两次)
10,40 02 * * 2,5(每周二和周五的凌晨2点10-40分钟的时候执行任务)
-:连续时间点
10 02 * * 1-5(周一至周五的凌晨2点10执行)
/: 对应取值范围内每多久一次
*/3 * * * * :每三分钟执行一次
每两小时执行一次
01 */2 * * * (01是自己定义的,只是给个时间点,可以随意定义)
每两天执行一次
10 04 */2 * *
注意:执行结果将以邮件形式发送给管理员:
*/3 * * * * cat /etc/fstab &> /dev/null (把错误结果送到黑洞中去)
3.4、cron的环境变量:
cron执行的所有命令都去PATH环境变量指定的路径下去找
PATH /bin:/sbin:/usr/bin:/usr/sbin
*/3 * * * * /bin/cat /etc/fstab &> /dev/null #可以在脚本中定义
vim /etc/crontab:这个配置文件是设定作业的(周任务,月任务,小时任务,月任务),如图:
ls /etc/cron.daily:此目录下是脚本文件,其中logrotate是日志滚动,tmpwatch监控tmp目录
ls /var/spool/cron/ :查看运行作业的用户
4、用户任务的管理:
crontab 后面有很多子命令,下面我们就简单来了解一下常用的子命令
-l:列出当前用户的所有任务
-e:编辑
-r:移除当前用户的所有任务
-u USERNAME:管理其他用户的cron任务
crontab -u hadoop -e:添加并编辑hadoop用户
如:cron-u hadoop –e
*/3 * * * * /bin/echo “How are you?”
ls /var/spool/cron/ #此时肯定是hadoop用户
anacrontab:是crontab的补充,但不能代替crontab,最小执行单位是天,而crontab是分钟
/etc/anacrontab :配置文件中共4个段,前2个段是指时间的,第3个段是纯注释信息,第四个段是要执行的任务。意思是以前在规定时间内没有执行的任务,在这执行了;要想运行anacron,必须启动,但默认是关闭的,我们要手动启动service anacrond start,同样cron也一样,service crond start启动cron(只有笔记本上) cron也受chkconfig的限制,hkconfig --list crond
4.1、例题:
crontab -u hadoop -e (以hadoop身份编辑)
crontab -e(编辑脚本,可以检查是否有语法错误)
# !/bin/bash
*/3 * * * * /bin/cat /etc/fstab &> /dev/null
保存退出
ls /var/spool/cron/(查看是否传递给hadoop)
su - hadoop(切换到hadoop用户)
crontab -l :可以查看hadoop的任务
好好看看吧会对你很有帮助的哦