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-590-230-310-120-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定义的各项工作的名称

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
at,batchcrontab都是Linux系统中常用的定时任务工具,它们分别用于在指定的时间或时间间隔内执行某些操作。它们的用法如下: 1. at at命令用于在指定的时间执行一次性任务。具体使用方法如下: ```bash at [options] time ``` 其中,time可以是一个绝对时间(例如2022-01-01 12:00:00),或者相对时间(例如now+1 hour)。at命令会在指定的时间执行一条命令,命令可以从标准输入中读取,也可以从文件中读取。 例如,要在2022年1月1日12:00:00执行命令`/path/to/command`,可以使用以下命令: ```bash echo "/path/to/command" | at 2022-01-01 12:00:00 ``` 2. batch batch命令用于在系统负载低的时候执行任务。具体使用方法如下: ```bash batch [options] [filename] ``` 其中,filename表示要执行的命令文件名。如果不指定filename,则会从标准输入中读取命令。 batch命令会在系统负载低于某个阈值时执行命令。这个阈值可以通过设置系统变量来修改。默认情况下,batch命令会在系统负载低于0.8时执行命令。 例如,要在系统负载低于0.5时执行命令`/path/to/command`,可以使用以下命令: ```bash echo "/path/to/command" | batch -l 0.5 ``` 3. crontab crontab命令用于在指定的时间间隔内定期执行任务。具体使用方法如下: ```bash crontab [options] filename ``` 其中,filename表示包含定时任务的文件名。这个文件中可以包含多个定时任务,每个任务占一行。 定时任务的格式如下: ``` * * * * * command ``` 其中,第1~5个星号表示时间间隔,分别表示分钟、小时、日、月、周。星号表示任意值。例如,如果第1个星号是5,则表示每小时的第5分钟执行一次任务。 command表示要执行的命令。 例如,要每天的9点执行命令`/path/to/command`,可以在crontab文件中添加以下内容: ``` 0 9 * * * /path/to/command ``` 这个命令表示在每天的9:00执行命令`/path/to/command`。 总体来说,at、batchcrontab都是非常实用的定时任务工具,可以根据实际需求选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值