linux例行性工作
例行工作一般分为两种( at 、crontab)
一、只执行一次 at
二、每隔一段时间执行一次,周期性工作 crontab
at执行一次的调度工作:
at 是个可以处理仅执行一次就结束工作的指令,要执行 at 时, 必须要启动 atd 这个服务。
crontab :这个命令所指定癿工作将会循环癿一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用命令执行外,也可通过编辑 /etc/crontab 来支持。 要使用 crontab 可以生效,必须启动 crond 服务。
atd 服务的启动与at的调度工作方式
[root@linusfay ~]# /etc/init.d/atd restart
Stopping atd: [ OK ]
Starting atd: [ OK ]
也可以设定一下开机时就启动这个服务
[root@linusfay ~]# chkconfig atd on
at调度工作方式
at 命令来调度工作,是将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务取用和执行了。
1.命令格式:
at [参数] TIME
2.命令功能:
在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(
ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig --level 2345 atd on)。
3.命令参数:
-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<列队> 使用指定的列队
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:
HH:MM
ex> 04:00
在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。
HH:MM YYYY-MM-DD
ex> 04:00 2009-03-17
强制规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
ex> 04pm March 17
也是一样,强制在某年某月某日的某时刻进行该项任务
HH:MM[am|pm] + number [minutes|hours|days|weeks]
ex> now + 5 minutes
ex> 04pm + 3 days
就是说,在某个时间点再加几个时间后才进行该项任务。
使用at调度的时候,由于发布at命令的工作目录的原因,最好是用绝对路径,不然会导致使用当前目录的为at的工作目录。
查询:atq 查询出系统等待执行的at调度
删除:atrm C 删除特定at调度。
在系统繁忙时,也可以让at调度在系统负载小的时候执行,推迟原有at调度。
batch:系统有空时才进行任务调度。
其实 batch 是利用 at 来进行命令下达,只是加入一些控制参数。使用batch的好处:他会在 CPU 工作负载小于 0.8 的时候,才执行你所下达的调度工作。
当然,batch的管理工作 还是有由atq和atrm来管理。
at调度命令使用权限控制
通过/etc/at.allow 不 /etc/at.deny 这两个档案来进行 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 这个命令。
循环执行的调度工作(crontab)
使用crontab命令建立可以循环只执行的调度工作。
当用户使用 crontab 这个命令来建立调度工作后,该项工作就会被记录到 /var/spool/cron/ 里,而且是以账号来作为判别。例如, linusfay使用 crontab 后, 他的工作会被记录到 /var/spool/cron/linusfay 下。但请注意,不要使用 vi 直接编辑该档案, 因为可能由于输入语法错误,会导致无法执行 cron 喔!另外, cron 执行的每一项工作都会被记录到 /var/log/cron 这个登录档案中,因此,如果你的 Linux 不知道有否被植入木马时,也可以查看一下 /var/log/cron
[root@www ~]# crontab [-u username] [-l|-e|-r]
选项不参数:
-u :只有 root 才能迚行这个仸务,亦即帮其他使用者建立/移除 crontab 工作排程;
-e :编辑 crontab 癿工作内容
-l :查阅 crontab 癿工作内容
-r :移除所有癿 crontab 癿工作内容,若仅要移除一项,请用 -e 去编辑。
[root@linusfay ~]# vi crontab -e --进入编辑页面,每项工作都是一行。
crontab -e 指定项目分为六栏,“分、时、日、月、周、命令”为其设定依据;
每项工作有六个字段,这六个字段的含义:
一些辅助字符
exp
*/5 * * * * /home/dmtsai/test.sh --每隔5分钟执行一次/home/dmtsai/test.sh
59 23 1 5 * mail linusfay < /tmp/liusfay.txt --每年5月1号23点59分将/tmp/liusfay.txt 邮件给
20 03 * * * /bin/mail -s "test_mail" root </root/install.log --将一封名为test_mail,内容来自/root/install.log的邮件每天 3点 20分邮给root。
删除单个调度的时候,使用crontab -e来编辑删除,若使用crontab -r 会删除所有的调度任务。
查看当前调度:crontab -l
编辑、添加:crontab -e
删除所有调度工作:crontab -r
在 Linux 底下的 crontab 会自帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项,但是某些原因或者是其他的 Unix 系统中,由于 crontab 是读到内存当中的,所以在你修改完 /etc/crontab 之后,可能并不会马上执行, 这个时候请重新启动 crond 这个服务 /etc/init.d/crond restart --类似at服务 /etc/init.d/cron restart
crontab 使用限制:
/etc/cron.allow: 将可以使用 crontab 的账号写入其中,若没在这个档案内的使用者则不可使用 crontab;
/etc/cron.deny: 将不可以使用 crontab 的账号写入其中,若未记录到这个档案当中的账户,就可以使用 crontab 。
以优先级来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个档案只选择一个来限制而已,因此,建议你只要保留一个即可。
系统默认是保留 /etc/cron.deny , 你可以将不想让他执行 crontab 的那个用户写入 /etc/cron.deny 当中,一个账号一行。
系统的配置文件: /etc/crontab
这个 crontab -e 是针对使用者的cron 来设计的,如果是“系统的例行任务”时, 该怎么办呢?是否还是需要以 crontab -e 来管理你的例行性工作呢?当然不需要,你只要编辑 /etc/crontab 这个档案就可以。有一点需要特别注意喔!那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个执行档,但是 /etc/crontab 可是一个『纯文本档』喔!你可以 root 的身份编辑一下这个档案。
/etc/crontab 的设定分为七栏,“分、时、日、月、周、执行者、命令”为其设定依据
vi /etc/contab
anacron
anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于处理非 24 小时一直启动的癿 Linux 系统的 crontab 的执行!所以 anacron 并不能指定何时执行某项任务, 而是以天为单位或者是在开机后立刻进行 anacron 的动作,他会去检查停机期间应该执行但是并没有执行的 crontab 任务,并将该任务执行一遍后,anacron 就会自动停止了。anacron 会以一天、七天、一个月为期去检查系统未执行的 crontab 任务。
------------
整理自鸟哥《鸟哥的linux私房菜第三版》