在了解linux任务计划之前,先来了解linux的邮件服务,因为任务计划默认会调用mail邮件服务来发送邮件。以下对mail邮件服务,进行初步了解。主要对邮件发送方法,查看邮件等。
常见邮件应用协议:
SMTP:(Simple Mail Transmission Protocol)简单邮件传输协议,TCP 25端口,smtps (linux操作系统默认启用smtp服务)
POP3:(Post Office Protocol)第3版邮局协议,TCP 110端口,pops
IMAP4:(Internet Mail Access Protocol)因特网消息访问协议,TCP 143端口,imaps
Mine/MIME:(Multipurpose Internet Mail Extensions)多用途、多功能互联网邮件扩展:以文本的方式对二进制数据做重新编码,并能够实现以文本协议发送二进制数据。常用编码编码方式:base64.。
语法:mail [-iInNv][-b<地址>][-c<地址>][-f<邮件文件>][-s<邮件主题>][-u<用户帐号>][收信人地址]
常见参数选项
-f:读取指定邮件文件中的邮件
-s:邮件的主题
-u<USERNAME>:读取指定用户的邮件
三种常用格式发信
1、当前shell当成编辑器来用,编辑完内容后Ctrl+D结束
mail -s mytest [email protected]
2、用管道编辑内容发送
echo "mytest mail mytest2" |mail -s mytest2 [email protected]
3、以文件内容作为邮件内容发信
mail -s mytest3 [email protected] < /tmp/mytest3.txt
任务计划可以分两种:一次性任务作业(at命令、batch命令);周期性任务作业(crontab命令、anacron)
一次性任务作业:at,一种交互式命令,有两种执行模式:交互式,它可以让用户在at>提示符下输入一个或多个命令;批处理式,将任务的命令写入文件中,由at调用
batch的命令使用与at的区别是,batch不能设定执行的时间,只能由系统自动选择空闲的时间执行,这里不做过多介绍,只是简单了解
注意:Ctrl+d为提交作业;任务执行的结果默认会以邮件的方式发送给提交者
语法:at [参数] 时间点
常见参数选项
-v:显示任务将被执行的时间
-c:显示任务的内容
-q<列队>:指定列队
-f<文件>:从指定的文件中读取要运行的作业
-t<时间参数>:以时间参数的形式提交要运行的任务
TIME:时间格式
hh:mm(小时:分钟)
midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)
now+time-units ,now就是当前时间,time-units是时间单位,可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期)22
以下交互式模式,示例:在22:01执行查看/tmp目录信息,显示/etc/fstab自动挂载信息两个任务
注:作业有队列的概念,默认情况下,所有作业都在一队下,作业列表是[a-z],使用命令 at –q [a-z]
以下文件模式,示例:在23:00执行文件fileat,fileat查看/tmp目录信息并且显示/etc/fstab自动挂载信息
周期性任务作业
crond是守护进程:指运行在后台随时监听用户的请求随时响应的进程。
cron分系统级别和用户级别,系统级别:系统自动执行的,以系统的环境变量(非登陆时shell)去运行该些进程,因此在编写脚本的时候被调用的命令建议写全路径,不然会出现执行脚本的
时候找不到路径的情况。执行结果默认会以邮件发方式发送给root用户,如果不想发邮件可以任务作业重定向至/dev/null(也称黑洞)
系统cron的文件保存/etc/crontab中,用户crontab在/var/spool/cron/UserName中
语法:crontab –l|-r|-e|-i [username]
常见参数选项
-l:显示作业文件的内容
-i 作业前给提示,常与r并用
-r 删除作业任务
-e 编辑作业任务
管理员加上-u 可以为普通用户指定任务:如crontab –l –u [普通用户]
以下强调一下上面描述的注意事项:
(1) 如果不想接收任务执行结果的通知邮件:COMMAND > /dev/null或COMMAND &> /dev/null
(2) 对于crontab文件来讲,%有特殊功用;如果命令中会出现%, 要记得转义,或者用单引号对其引用
(3) crontab的PATH变量与用户的变量不完全相同,所以,建议在cron中的任务要使用绝对路径
下面简要解析crontab中时间格式
# 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
第一段:分钟 0—59
第二段:小时 0—23
第三段:日期 1—31
第四段:月份 1—12
第五段:星期几,0代表星期日 0—6
举一些小例子说明时间表示法:
1)每个时间都应该使用其可用的有效取值范围内的值;
2 3 4 * * //4号3点2分
2)某时间位上的*表示每
* 3 4 * * //4号3点每一分钟都执行
3)-:连续的时间相邻取值
15-18 3 4 * * //4号3点的15分到18分每分执行一次
4),:离散的时间取值
10,15,20 3 4 * * //4号3点的10分,15分,20分各执行一次
5)/#,表示在指定时间范围内每隔#一次
*/15 3 4 * * //4号3点每15分钟执行一次
6)如果我们不……想查看执行的结果呢,可以把输出重定向,如:
0 */2 * * * /bin/echo “mytest1” &> /dev/null
示例:4号3点2分查看/etc/fstab文件
注:anacron和cron 相似的任务调度器,只不过它并不要求系统持续运行,它可以用来运行通常由 cron 运行的每日、每周、和每月的作业;任务被列在配置文件 /etc/anacrontab 中。对于每项任务,anacron 先判定该任务是否已在配置文件的 period 字段中指定的期间内被执行了。如果它在给定期间内还没有被执行,anacron 会等待 delay 字段中指定的分钟数,然后执行command 字段中指定的命令;
练习:
1、每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD;
2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss
3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线
或者使用
0 0 * * * /usr/bin/egrep (egrep ‘^(S|M)‘ /proc/meminfo;echo "====================") >> statistics/meminfo.txt