1.基础概念
Linux可以通过at,batch来设定任务执行计划,让任务在指定时间点运行,运行的结果将会以邮件的形式告知给设定运行计划的用户。如果需要周期性运行某任务则要用到cron命令
2.相关命令
2.1mailx
用途:mailx是linux的内置邮箱处理工具,可以用来查看发送邮件。一般电子邮件服务包含如下三种协议smtp(简单邮件传输协议,用于传送邮件)、pop3(邮局协议,用来收邮件)、imap(因特网邮件传输协议,用来收邮件)。Imap邮件协议目前在企业中使用比较广泛,他能与服务器完成双向同步,比较适合多客户端操作。
邮件查看:
[root@localhost ~]# mailx ####输入mailx命令
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 4 messages
> 1 [email protected] Thu Mar 9 15:43 90/2906 "[abrt] full crash report" #### 邮
2 root Sat Jun 3 09:40 49/1208 "Output from your job 3" #### 件
3 root Sat Jun 3 15:34 16/542 "Output from your job 4" #### 队
4 root Sat Jun 3 20:40 19/623 "Hi #### 列
& ?
?注释:
#(数字)+ 回车:查看指定序号的邮件
delete #(数字)+ 回车:删除指定序号的邮件
l + 回车:列出可以操作的所有命令
q + 回车:退出mailx命令。
发送邮件:
mailx [-s 'SUBJECT'] username[@hostname]
邮件正文的生成:
(1) 直接给出,Ctrl+d;
(2) 输入重定向;
(3) 通过管道;
echo -e "How are you?\nHow old are you?" | mail
2.2 at
用途:用于管理计划作业任务。
格式:at [ option ] TIME
TIME:
HH:MM [ YYYY-mm-dd ] :指定具体几点几分执行,还可以加上年月日
noon:指定中午执行
midinight:午夜12点执行
teatime:下午茶时间执行,一般在下午5点
now + #{minutes,hours,days,weeks}:现在时间为基点,多少分、小时、天、周后执行
常用选项:
-q QUEUE:使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue
-l :列出指定队列中等待运行的作业,相当于atq
-d:删除指定作业,相当于atrm
-c:查看具体的作业任务
-f /path/form/somefile :从指定文件中读取任务
2.3 batch:
用途:batch实际上也是调用at,让系统自动选择空闲时间去执行此处指定的任务;
2.4 cron
功能:管理周期性任务。
简介:
相关的程序包:
cronie:cron主程序包,提供了crond守护进程及相关辅助工具,如果要运行cron先使用systemctl status crond(CentOS 7)/service crond status(CentOS 6)命令确认crond是否运行。
cronie-anacron:cronie的补充程序,用于监控cronie任务执行的情况,如果cronie程序设置的任务在设定的时间点未执行,则anacron会在随后启动一次此任务。
crontabs:包含CentOS提供的系统维护任务
系统cron任务:
通过编辑 /etc/crontab 文件来实现,编辑/etc/crontab文件这种方式仅限于root用户使用。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
示例:晚上9点10分备份一次 /etc 到/root/bakup下。
# 10 21 * * * user-name cp -a /etc/root/bakup/
时间表示方法:
(1) 特定值:给定有效时间点,例如上述示例,指定晚上9点10分,通过10 21 * * * 来表示
(2) * :给定时间点上所有有效值,比如将*写在分钟里则表示每分钟
(3) 离散取值 ,:指定某几个不连续的时间点例如“0 0 * * 1,3,5 ”则表示每周一、三、五的00:00执行作业
(4) 连续取值 -:指定一个取值范围,例如“0 1-3 * * *”则表示在每天1点、2点、3点执行作业。
(5) 定义步长 / :在指定的范围内定义步长,比如“*/10 * * * *”则表示每10分钟执行一次作业。即10分、20分、30分、40分、50分、60分各执行一次作业。
用户cron任务:
用户使用crontab命令来定义周期性计划任务,每个用户都有一个专用的文件放置于/var/spool/cron/USERNAME,但是除root外的其他用户没有查看、编辑此文件的权限,只能通过crontab命令将计划任务按照规定格式写入到此文件中。
格式:crontab [ -u user ] [ -l | -r | -e ] [ -i ]
参数:
-l :列出当前用户所有的任务
-e :编辑任务
-r :移除所有任务
-i :同-r一起使用,以交互式模式让用户有选择的移除指定任务
-u user :仅root用户可运行,root用户可代其他用户管理cron任务
sleep命令:
用途:指定休眠时间,配合crontab可实现非秒级或不能被整除的时间表示
格式:sleep NUMBER [ SUFFIX ]
SUFFIX:
s :秒,如果不填写suffix,默认都是秒
m :分
h:小时
d:天
注意点:
(1) 由于cron执行任务时使用的是自己的环境变量,所以建议使用命令的绝对路径。
(2) 由于运行结果都会以邮件通知相关用户,COMMAND > /dev/null表示只将执行错误的信息邮件通知用户,COMMAND &> /dev/null 表示不通过邮件通知相关用户执行结果
(3) 对于cron任务来说,%有特殊用途,所以命令中若是要使用%必须使用转义符\,不过如果把%放置于单引号中可不转义
示例:
(1) 在/root目录下有一个文件1,每10秒将date执行结果追加到文件1中。
[root@localhost cron]# crontab -e
no crontab for root - using an empty one
* * * * * sleep 10;date>>/root/1
* * * * * sleep 20;date>>/root/1
* * * * * sleep 30;date>>/root/1
* * * * * sleep 40;date>>/root/1
* * * * * sleep 50;date>>/root/1
~
~
~
"/tmp/crontab.rZAyFQ" 5L, 165C written
crontab: installing new crontab
[root@localhost ~]# cat 1
Tue Jun 6 16:03:12 CST 2017
Tue Jun 6 16:03:22 CST 2017
Tue Jun 6 16:03:32 CST 2017
Tue Jun 6 16:03:42 CST 2017
Tue Jun 6 16:03:52 CST 2017
Tue Jun 6 16:04:11 CST 2017
Tue Jun 6 16:04:21 CST 2017
Tue Jun 6 16:04:31 CST 2017
Tue Jun 6 16:04:41 CST 2017
Tue Jun 6 16:04:51 CST 2017
Tue Jun 6 16:05:11 CST 2017
(2) 每4小时备份一次/etc目录至/root/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”。
* */4 * * * cp -a /etc /root/backup/etc;tar -Jcf /root/backup/etc-`date '+%Y-%m-%d-%H'`.tar.xz /root/ba
ckup/etc
(3) 每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”
* * * * 0,2,4 cp -a /var/log/messages /logs/messages-`date '+%Y%m%d'`
(4) 每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
* */2 * * * cat /proc/meminfo|grep ^[SM].* >> /tmp/meminfo.txt
(5) 工作日时间内,每小执行一次“ip addr show”命令
* */1 * * 1-5 ip addr show