定时任务
设定一次性的定时任务使用“at”,建立周期性任务则使用“crontab”
新建任务 at time crontab -e
任务列表 at –l crontab -l
详细信息 at –c jobnum n/a
删除任务 at –d jobnum crontab -r
编辑任务 n/a crontab -e
两种命令执行结果的输出均以邮件方式通知用户,并不返回至屏幕或其他位置
at支持多种复杂的时间定义方式,可以接受HH:MM这样的具体时间定义,也可以用midnight、noon或者teatime(4pm)以及时间后缀AM/PM这样的描述方式定义一天内的任务;对于时间定义范围超过24小时的,也可以用日期来形容,比如month-name day,或者用固定的MMDDYY、MM/DD/YY等格式,但是需要注意的是,如果指定了日期,还必须指定这一天里具体执行任务的时间点;另外,也可以使用相对时间指定方式,比如now + count time-units,这个time-unit可以是minutes、hours、days或weeks等(以上摘自“man at”)
下面演示几个例子
1、在22:57分执行ps
image
输入at 22:35后回车,进入任务编辑状态,然后每行一条命令,结束时输入ctrl+d
image
在预定时间到了后,任务会自动运行,并将运行结果发送邮件至创建该任务的用户,邮件发送的时间是22:57:02,也就是任务刚结束
2、不指定绝对时间点,从现在开始2分钟后执行ps
image
image
第9号任务已经执行完毕,并将结果用邮件发送给了root
 
周期任务
实际使用中,周期任务是最常用的一种计划任务方式,写法上相比at要略复杂一些,但是执行效率肯定高出at,可以达到一劳永逸的效果,不用每次都手工做定时任务
crontab -e用来新建或编辑现有的周期任务,时间指定方式和at有区别,会分有5个字段,每个字段表示不同的时间单位,字段间用空格分开,时间后面跟着要执行的命令,最好是写命令或程序的绝对路径,每行一条任务
编辑的时候实际上是调用了vi编辑器,所以编辑操作是很方便的,编辑完成后wq保存退出就可以了
minute hour day of month month day of week
* * * * *
0-59 0-23 1-31 1-12 0-7
含义及取值范围
minute:分钟,0-59
hour:小时,0-23
day of month;日期,1-31
month:月份,1-12
day of week:星期,0-7,0和7分别都可表示星期天
举几个例子,还是以执行ps命令为例,输入crontab -e
1、每分钟如何定义
image
2、每年11月17日23点35分
image
3、每天12点整
image
4、每周一至五的9点至17点
image
5、每隔2小时10分钟
image
查看任务列表
image
删除所有任务
image
 
组合命令
在Linux中,还有一种命令执行方式,组合命令,简单的说就是一次输入多条不同的命令并执行,这里分两种方式,举例说明
date;who | wc -l
(date;who) | wc –l
image
第一条含义是先执行date,然后再执行who,把who的输出传给wc统计行数
第二条含义是先执行date,然后再执行who,但是把date和who的输出一起传给wc统计行数
这里的圆括号相当于执行命令时在当前shell里又开启了一个子shell,子shell中的变量对于子shell之外的代码块来说, 是不可见的,也就是说,系统会将圆括号内的所有命令输出当做是一个整体,而不管是否有分号分隔开,然后将这个整体的输出统一传送给wc
 
补充说一个退出状态
进程运行的成功或失败,通常会表示为退出状态exit status,以0代表成功,1~255之间的任意数字代表失败
$?存放着最近执行命令的退出状态
比如ping命令,ping一台主机,然后看一下这条命令执行后的退出状态
image
由于不存在station999这台主机,ping命令肯定不会成功执行,那么就会返回错误值,所以查看退出状态不为0
 
讲上面这个东西,其实主要是接下面要讲的内容,逻辑判断操作符
&&:意为然后,表示当前面的操作正确,然后继续做后面的操作
||:意为否则,表示当前面的操作不正确时,做该符号后面的操作
这样说起来有点抽象,还是举个ping命令的例子来解释一下
我们用ping命令来测试一下是否可以连通网关192.168.0.254
image
执行结果显示“gateway can be connected”,因为&&前面的操作结果返回值为正确,然后执行了&&后面的操作
如果换一个ip呢?
image
gateway is down,^_^,因为192.168.0.253这个ip的主机不存在
 
test命令
用于在条件执行命令中判断执行状态布尔值,返回值为0代表正确,1代表错误
常用的操作符
-eq:表示判断数字上是否相同
=:表示字符上是否相同
-ge/-gt:表示 大于等于/大于
-le/-lt:表示 小于等于/小于
-f:判断文件是否存在并且为一个普通文件
-d:判断文件是否存在并且为一个目录(注意:目录也是一种特殊的文件,everything is file)
-x:判断文件是否存在并且可被执行
-z:判断字符串是否为空
判断语句的写法有两种,长格式和短格式
image
这种写法是长格式,也就是判断语句略长,test 66 –eq 67,另有一种短格式写法,同样是表达比较两个整数大小
image
用中括号将比较条件括起来就可以了,不过要注意的是,中括号和表达式之间一定要用空格隔开