linux定时任务at,batch和crontab

申明:本文仅是个人《Linux鸟哥私房菜》学习笔记,转载请引用原文链接和同样的申明

at:仅执行一次就结束调度,使用at需要atd支持,执行at任务最好使用绝对路径,at执行完后的输出会发送到用户邮箱,而不会显示在标准输出上
crontab:一直循环执行

at

开启atd服务:(貌似需要root权限)
/etc/init.d/atd restart
chkconfig atd on

at运行方式

事实上我们仅使用at命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作就可以被atd服务取用并执行,at的实际工作情况是这样的:
1:先查找 /etc/at.allow文件,写在这个文件中的用户才可以使用at,没有在at.allow文件中的用户就不可以使用, 即使at.deny中也没有
2:如果at.allow不存在,就查找 /etc/at.deny,写在这个文件中的用户都不能使用at,而其他用户都可以使用at
3:如果两个文件都不存在,那么就只有root用户可以执行at

at语法:

at [-mldv] TIME
参数说明:
-m:at任务完成后用邮件通知用户,即使没有输出信息
-l:相当于atq,列出系统上该用户的所有at调度
-d:相当于atrm,取消一个在at中调度的工作
-v:使用较明显的时间格式列出at调度中的任务列表
-c:列出后面姐的该项工作的的实际命令内容

TIME:时间格式,指定什么时间执行at任务
HH:MM 例如:04:00,如果当前以超过设定的时间,则任务在第二天的同一时间执行
HH:MM YYYY-MM-DD 例如04:00 2014-11-11
HH:MM[am|pm] [Month] [Date] 例如 02:00 Dec 12
HH:MM[am|pm] + number [minutes|hours|days|weeks] 例如 now + 10 minutes 表示在某个时间点后多久执行任务

示例:

在2014-3-15晚上6点执行/home/kx/shell-utils/show-colored-text.sh脚本
$ at 18:00 2014-3-15
at>sh /home/kx/shell-utils/show-colored-text.sh
at>(输入ctrl+d)
这样任务就设置好了,查看自己有哪些at任务:
at -l 或者 atq
删除任务:
先使用atq找出任务编号:
例如atq显示
1     2014-03-15 06:49 a kx
2     2014-03-15 06:51 a kx
那么可以使用at -d 1 或者atrm 1来删除第一个任务

batch:系统有空闲的时候才进行后台任务

batch其实也是利用at来执行任务的,只是加入了一些控制参数而已,batch的使用方式和at相同,查询和删除batch任务也是使用atq和atrm

crontab


crontab也有两个权限配置文件/etc/cron.allow和/etc/cron.deny,与at相同,在cron.allow中的用户是允许使用crontab的,而在cron.deny中的用户是没有使用crontab权限的, cron.allow的优先级比cron.deny高,建议两个中只保留一个就可以了,而且一般保留cron.deny,要 注意的是文件中的一个用户占用一行,crontab新建的任务会记录在 /var/spool/cron/中,例如test用户的记录在/var/spool/cron/test/中,而任务执行的日志记录在 /var/log/cron中,想要知道系统中是否有木马可以查询一下这个日志记录。

语法:

crontab [-u username] [-l|-e|-r]
参数说明:
-u:只有root用户可以执行这个任务,也即帮其他用户新建、删除任务
-e:编辑任务内容
-l:查询任务内容
-r:删除任务内容

要新建任务的时候输入crontab -e即可进入任务编辑,使用的是vi,每一行表示一个任务
每行的内容有点像这样: 0 12 * * * sh shell-utils/show-colored-text.sh
前面5个字段分别表示分钟,小时,日期,月份,周,后面接的是命令
代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 0-31 0-12 0-7 就是命令

其中周里面的0和7都代表周日, 注意周与日月不可并存

特殊字符:
特殊字符 代表意义
*(星号) 任意时刻,如0 12 * * * sh shell-utils/show-colored-text.sh的*代表每个月的每个周中的每一天
,(逗号) 代表分割时段,例如0 3,6 * * * command,表示在3点和6点时执行任务,注意不要有空格符
-(减号) 代表时间段范围,例如如果要在凌晨1点到6点的30分的时候执行command命令则应该是 30 1-6 * * * command
/n 表示每隔n个单位间隔执行一次的意思,例如 */10 1-6 * * * command表示凌晨1到6点时间段内每隔10分钟执行一次
command


示例:

1)每天12:00执行shell-utils/show-colored-text.sh脚本
0 12 * * * sh shell-utils/show-colored-text.sh

2)女朋友的生日是6月16,每年的6月15晚上23:59给她发送一条消息
59 23 16 6 * mail ailing</home/kx/lover.txt

3)每隔5分钟执行一次test.sh脚本
*/5 * * * * sh test.sh

crontab -e是专门针对用户设计得,管理系统的任务只要编辑 /etc/crontab就可以了,crontab -e其实是/usr/bin/crontab命令,而/etc/crontab则是一个纯文本文件,cron每分钟回去读取一次/var/spool/cron和/etc/crontab里面的内容,每次编辑完/etc/crontab之后保存一下系统就会自动执行任务了
要注意的是有些系统是将/etc/crontab加载到内存里的,所以可能你编辑之后不会马上执行,这个时候可以使用/etc/init.d/crond restart命令重启crond服务就可以了

anacron

anacron并不能指定何时执行某项任务,而是以天为单位或者是开机的时候立即进行anacron的操作,它会去检测在停机期间应该执行但是没有执行的crontab任务,并将检测到的任务执行一次,然后自动停止。一般以一天,七天和一个月为期。

语法

anacron [-sfn] [job]
参数说明:
-s:开始连续执行各项任务,会依据时间记录文件的数据判断是否执行
-f:强制执行,不判断时间文件的记录
-n:立刻进行未进行的任务,不延迟等待时间
-u:仅更新时间记录文件的时间戳,不进行任何工作
job:有/etc/anacrontab定义的各项工作的名称

你可能感兴趣的:(linux定时任务at,batch和crontab)