日期: 2015年09月05日
任务计划:
任务计划分为两种:
1、在未来时间点一次性执行某任务,用到的工具: at、batch
2、在未来时间内周期性执行某任务,用到的工具: cron
查看系统监听端口:
ss -tnl
netstat -tnl
================================================================================
电子邮件服务:
smtp:simple mail transmission protocol 简单邮件传输协议
/var/spool/mail/USERNAME
pop3:post office protocol 邮局协议
imap4:internet mail access protocol互联网访问协议
邮件服务启动与否状态查看: netstat -tnl 或 ss -tnl
[[email protected] ~]# netstat -tnl | grep ‘:\<25\>‘
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
127.0.0.1:25 表示此服务的端口仅监听在本地的回环接口上,默认收发邮件
仅能在本机上的用户间进行,且只能通过回环接口上的地址进行。
================================================================================
mail命令
用法:
mail:进入交互式收发邮件接口
q: 退出
N: 查看第N封邮件
mail -s "SUBJECT" [email protected]
mail -s "SUBJECT" [email protected] < /PATH/FROM/SOMEFILE
COMMAND | mail -s "SUBJECT" [email protected]
<<========================================【at】========================================>>
at命令
功能:
承载未来时间运行的某作业,支持使用作业队列,默认为a队列。
格式:
at [OPTION]... TIME
at -f /PATH/FROM/SOMEFILE TIME
Ctrl+d 提交作业
作业结果:以邮件形式发送给系统上的当前用户
TIME:
(1)精确时间
HH:MM
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YYor [CC]YY-MM-DD
tomorrow
(2)相对时间
now+UNIT
minute、hour、day、week
(3)模糊时间
noon 正午12:00
midnight 午夜0:00
teatime 下午16:00
常用选项:
-q QUEUE: at任务作业队列
-f /PATH/FROM/SOMEFILE...TIME: 从指定的文件中读取要运行的任务作业
-l: 查看队列中的待运行作业列表,相当于atq命令
-c AT_JOB_NUM: 查看指定待运行作业的内容
-d: 删除指定作业,相当于atrm
<<========================================【batch】========================================>>
batch命令
功能:
由系统自行选择在资源较为空闲的时间点运行指定的任务
周期性任务计划:cron
CentOS 5:vixie-cron
CentOS 6/7:cronie
周期性任务计划需要服务作为后台支撑,该依靠守护进程:crond
可使用 service crond status 查看crond是否处在运行状态
crond (pid 1492) is running... //表示服务正在运行
cron任务分为两类:
(1) 系统cron任务:没有默认运行用户身份,所以需要额外指定运行者
配置文件:/etc/crontab
(2) 用户cron任务:由某个用户所提交,默认以提交者身份运行,无需额外指定运行者。
配置文件:/var/spool/cron/USERNAME
cron配置文件中每行定义一个独立的任务
★注意:建议在定义cron任务时,所用到的命令使用绝对路径;如果是脚本,
脚本中的命令需使用绝对路径,或自定义一个拥有完整路径的系统环境变量。
★系统cron一般很少手动去编辑,大多数情况都是定义用户cron
使用vi编辑cron任务,无法检查语法错误,建议使用crontab命令,不建议使用vim命令
配置文件范本:
SHELL=/bin/bash //定义用哪个shell用来解释运行的任务
PATH=/sbin:/bin:/usr/sbin:/usr/bin //用来定义任务中要执行命令的路径
MAILTO=root //表示系统cron任务运行后把邮件发送给哪个用户
HOME=/ //定义当前系统cron自己的家目录
# Fordetails 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) ORsun,mon,tue,wed,thu,fri,sat
#| | | | |
#* * * * * user-name command to be executed
共有7个字段组成:
前5个字段:时间点(周期性任务的时间点)
user-name: 说明以哪个用户的身份运行任务
command to be excuted: 指明要运行的任务
共5个时间点:
分钟:有效取值范围0-59
小时:0-23
日:1-31
月:1-12
周几:0-7
★注意:几月几号与周几,不建议同时使用
时间点表示法:
* 对应时间点有效取值范围内的每个时间点
- 一个特定的连续时间范围:3-7
, 一个离散的时间点: 3,5,7
/# 有效时间范围内的每多少时间,用于指定频率
*/# 在对应的时间位有效取值上每#个时间单位一次
例如:15 8 5 3* //表示每年3月5日8点15分 *表示周几不做限定
例如:5 20 10 ** //表示每月10日20点05分 后面两个 * 表示不对年和周几做限定
例如:30 18 * *3 //表示每周三的18点30分
例如:0 3 * * * //表示每天的3点, 后面的三个 * 表示不对年、月、周几做限定
例如:30 * * ** //表示每小时的30分钟运行任务
例如:* * * ** //表示每分钟任务(最小时间单位为分钟)
例如:* */3 * ** /bin/echo "hello" //表示当每三个小时到达时,这个小时内每一分钟都运行
例如:15 */3 * ** /bin/echo "hello" //表示每三个小时运行一次,(分钟一定得是有效取值范围)
例如:*/3 * * ** /bin/echo "hello" //表示每三分钟运行一次后面命令
★注意:对无法等分的数字,无法用这个格式指定,如:并不能精确做到每7分钟一次
例如:5 7 * *1-5 /bin/echo "hello" //表示周一到周五,每天的7点5运行后面的命令
例如:5 7 * *2,4,6 /bin/echo "hello" //表示每周二、四、六的7点5分运行后面的命令
思考:
1、如果想实现每8分钟运行一次某任务,如何编写
2、如果想每10秒运行一次某任务,如何编写
用户cron任务定义:
<<========================================【batch】========================================>>
crontab命令
格式:
crontab[-u user] [-l | -r | -e]
-u user: 不是管理自己的cron任务,而是指定的目标用户的cron任务,仅root拥有管理其他用户的cron任务的权限,默认管理自己的
-l list,列出任务
-r remove,移除所有任务(注意:删除一个任务应该通过编辑界面删除行实现)
-e edit,打开编辑界面定义corn任务
crontab -e -u USERNAME
补充性的工具:anacron:
为cron提供了补充机制,在每次开机后检查crontab中的所有任务,是否在过去计划周期内被执行,如果任务没被执行它会尽快启动。
注意:任务运行后的结果,以邮件发送给任务相关用户
(1)、如果不想接收任务执行结果的通知邮件,丢弃邮件通知可使用输出重定向
COMMAND > /dev/null
COMMAND &> /dev/null
COMMAND > /dev/null 2>&1
(2)、对于crontab文件来讲,%有特殊功用;如果crontab中命令需要使用%
要记得对其转义或者使用单引号对其引用
* * * * * /bin/touch /tmp/test-$(date+\%F-\%H-\%M-\%S)
* * * * * /bin/touch /tmp/test-$(date+‘%F-%H-%M-%S‘)
练习:
1、每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD.tar.xz;
//事先创建好/backups目录,键入 crontab -e 编辑cron任务
//编辑完后使用crontab-l 列出任务
//修改系统时钟,验证corn任务是否被执行
2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backups/fstab-YYYY-MM-DD-hh-mm-ss
//使用命令crontab -e 编辑cron任务列表,新增一行任务
//修改时间,验证任务是否被执行
3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线
//事先创建好/statistics目录,然后编辑cron任务文件
//修改系统时间验证任务是否被执行