申明:本文仅是个人《Linux鸟哥私房菜》学习笔记,转载请引用原文链接和同样的申明
at:仅执行一次就结束调度,使用at需要atd支持,执行at任务最好使用绝对路径,at执行完后的输出会发送到用户邮箱,而不会显示在标准输出上
crontab:一直循环执行
at:
开启atd服务:(貌似需要root权限)
/etc/init.d/atd restartchkconfig 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,而其他用户都可以使用at3:如果两个文件都不存在,那么就只有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-11HH:MM[am|pm] [Month] [Date] 例如 02:00 Dec 12HH: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-15at>sh /home/kx/shell-utils/show-colored-text.shat>(输入ctrl+d)
这样任务就设置好了,查看自己有哪些at任务:
at -l 或者 atq
删除任务:
先使用atq找出任务编号:例如atq显示1 2014-03-15 06:49 a kx2 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定义的各项工作的名称