任务计划
在未来时间点一次性执行某任务 at,batch
周期性执行某任务:crontab
at和crontab实现以邮件服务发给系统
目前系统每个用户都有邮件地址,邮件服务会启动25 port ss -tnl
下图为127.0.0.1:25,只能够给本机本身
电子邮件服务:
定义:
smtp:simle mail transmision protocol 邮件发送
/var/spool/mail/USERNAME :每个用户都有邮箱服务
pop3:post office protocol 邮件接收
imap4:收邮件internet mail access prococol
mail命令使用:control+d提交
命令格式
NAME mailx - send and receive Internet mail SYNOPSIS mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . . mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name] mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]
直接mail: 进入交互式邮件收发接口
mail -s "subject" username@hostnmae 邮件内容要交互式提供
输入重定向 mail -s "subject" username@hostname< /path/from/somefile
command| mail -s "subject" username@hostnmae
示例
mail -s "hi" root@localhost -s表示标题
at命令
承载未来时间运行的某作业,支持使用作业队列方式
默认队列标识符a后面可以为相对时间或绝对时间
at now+3minute 在后面后三分钟(指提交任务)
control+d提交任务
命令格式:
at [-V] [-q queue] [-f file] [-mMlv] timespec...
at [-V] [-q queue] [-f file] [-mMkv] [-t time]
at -c job [job...]
atq [-V] [-q queue]
at [-rd] job [job...]
atrm [-V] job [job...]
-q queue at作业队列
-f /path/from/somefile:从指定位置文件中读取要运行的作业
-l 查看作业队列中等运行作业列表,相当于atq
-c at_job_num:查看待运行作业的内容
mail建议使用绝对路径
-d 删除 at -d 3 删除第三个队列的 相当于atrm
at的时间表示方式
(1)绝对时间:HH:MM
MMDD[CC]YY,MM/DD[CC]YY,DD.MM[CC]YY or [CC]YY-MM-DD
tomorrow明天
(2)相对时间now+=unit minute,hour,day,week
(3)模糊时间 midnight 午餐 moon teatime下午4点
at 15:35 后面为交互式
At -l显示当前队列 a 队列,
Batch:
由系统自行选择在资源较为空间时运行指定的任务,与at基本类似
Crontab
周期性任务计划,at只能够在某个时间点运行一次
crontab需要通过使用守护进程 crond( 检查时间表是否应该运行一次)
crond以管理员运行
周期性计划有二类:
(1)系统cron任务,无默认运行用户身份,需要额外运行者 /etc/crontab中直接
VIM命令,不推荐使用
[root@centos71 mail]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
共七个字段组成:前五个字段时间点
user-name:以那个用户的身份运行任务
command to be executed要运行任务
(2)用户cron任务,由某个用户提交,默认以提交者运行,无需要额外指定运行者
/var/spool/cron/USERNAME与用户同步、不建议使用VIM
crontab命令:建议,编辑自己的守护任务
用户只有6个字段,与系统相比无用户
[root@centos71 mail]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
# | | | | |
# * * * * * command to be executed
5个时间点 分钟:有效范围0-59
小时:0-23
日(每个月内日期)1-31
月 1-12
周几(0-7)
注意:几月几号与周几,不建议同时使用
例如3月6日,周2,并不是每年3月6日为周2
6 * * * * *表示每的,五个之间与的关系,要同时满足
大时间点取星号(每个范围可用值)
时间点表示法:
*:对应时间点有效取值内的每个时间点
6 : 数字本身为既定时间点 如6表示6分(每天)。。
- :一个特定连续时间范围3-7
, :表示一个离散的时间3,5,7 (如分钟表示3,5,7,分钟)
/# : 有效时间范围内的每多少时间 用于指定频率
1-30/4 表示 1-30内每4分钟一次 */4每4小时一次
示例
5 */3 * * * /bin/ech "howdy" 每三小时运行一次后面的命令 :备注:第1位需要指定数值,才有每之意
5 7 * * 1-5 周一周五,每点7点5分,运行后面任务
执行结果以邮件方式发送给客户 /bin /usr/bin /sbin /usr/sbin
controntab只能使用以上路径的使用,建议使用绝对路径
crontab命令
crontab [-u user] [-l | -r | -e] [-i] [-s]
-u user:不是管理自己的cron任务,而是指定的目标用户
-l列出任务
-e 默认是vim编辑器
-r 清空所有任务
只能以管理员查看所有
示例:
1、实现实现每8分钟运行一次任务? 要整除无精确时间运行,最后一次可以不同
这里*/8 60/8 无法整除,剩4,解决sleep
2、每10秒运行一次任务?crontab只支持分钟,不支持秒,要使用sleep命令
补助工具:anacron 定期检查任务,如果指定时间未执行,不管是否在
时间点,要立即或指定时间运行一次!,默认未启动!服务器中未执行
注意:如果不想接受任务执行结果的通知邮件
command>/dev/null 成功
command &>/dev/null 不管是否成功
(2)对于crontab文件中有%有特殊功能,如果使用中出现%,需要使用转义,或用单
引号' '对其引用'%'
(3)crontab的path变量与用户的变量不完全相同,所以建议在cron的任务要使用绝对路径
如果使用可考虑使用export
Cat /etc/crontab
练习:
1、每周1至周六的凌晨3点20分,运行tar命令对/etc/目录进行归档另存
存储位置为/backup/etc-yyyy-mm-dd.tar.xz
xz /path/to/somefile
-d 解压 xz �Cd test.tar.xz
-#:1-9 默认是6
-k:压缩时保留文件
tar实现归档工具,只归档不压缩 cf xf tf
-c创建归档文件
-f 后面必须有参数,指定文件名,文件名为*.tar
-x展开归档
--xattrs在归档同时保护其扩展属性信息
-t不展开归档,直接查看归档了那些文件
归档后压缩 xz 文件名.tar
-zcf 直接调用即归档再压缩,调用gzip
-zxf 调用gzip解压缩并归档
-jcf: bzip2 直接调用即归档再压缩
-jxf:
-Jcf:xz 直接调用即归档再压缩
-Jxf: 直接调用即归档再压缩
tar -jcvf /tmp/51ctobak/etc-`date +\%Y-\%m-\%d`.tar.xz /etc
其中“+%Y-%m-%d”可以使用%F
crontab时间格式: 20 3 * * 1-6 ,在使用crontab编辑时注意使用转意符
2、每周日凌晨2点30分,运行cp命令对/etc/fstab进行文件备份,存储位置为
/backup/fstab-yyyy-mm--dd-hh--mm-ss
cp -a /etc/fstab /tmp/51cto/fstab-`date +%Y-%m-%d-%H-%M-%S`
crontab时间格式 30 2 * * 7
3、每天晚上12点,取得/proc/meminfo文件中所有以s或m开头的行,追加至
/statistics/meminfo.txt文件中且每天的消息之前,要加上类似===============分隔线;
grep -o '^[S,M].*' /proc/meminfo 以S或M开关的行
[root@centos71 ~]# echo "===============================" >> /statistics/meminfo.txt && grep '^[S,M].*' /proc/meminfo >> /statistics/meminfo.txt
输出:
编辑crontab时间格式 0 0 * * *