定时(计划)任务:未来的某事件点执行一次某次任务或者周期性的运行某个任务。执行结果会通过邮件的形式发送给用户
我们把定时任务分为以下两个:
定时任务:at batch
周期性任务:crontab
at命令
计划任务,在特定的时间执行某项工作,在特定的时间执行一次,需要安装at服务,apt-get install at
时间定义
at允许接受使用一套相当复杂的指定时间的方法
- 能够接受使用noon(中午)teatime(下午茶时间,一般下午四点)等比较模糊的词语来指定时间
- 能够接受当天的hh:mm(小时:分钟)式的时间指定
- 能够接受使用12小时计时制,即在时间后面加上 AM(上午) PM(下午) 例如: 8am 9pm
- 能够指定命令执行的具体日期 例如:2019-8-11 (年-月-日)2019/8/11(年/月/日)
- 能够使用相对计时法,指定格式为now +count time-unit,now是当前时间,time-units是时间单位,这里可以指minutes,hours,days,weeks。count是时间的数量。例如:now + 5 minutes 04pm+ 3 days
- 能够直接使用today(今天) tomorrow(明天)来指定完成命令的时间
语法结构
at 选项 参数
-q 列出任务
-f 从文件中读取
-l 列出任务
-d 指定删除
-v:列出已执行未删除的任务
-V:版本号
-c:查看作业内容
相关命令
at:在特定的时间执行一次性的任务
atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号,日期,小时,队列和用户名
atrm:根据Job number删除at任务
batch: 在系统负荷允许的情况下执行at任务,换言之,就是在系统空闲的情况下才执行at任务
示例
一分钟后创建一个test文件
[root@test1-6 ~]# at now +1 minutes
at> touch test
at> <EOT>
crond命令
crond服务安装
安装crontab:yum install crontabs
格式
# .---------------- 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
minute:表示分钟, 可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
例如:
3 * * * * : 每小时的第3分钟执行一次;
3 4 * * 5 :每周5的4点3分执行一次;
5 6 7 * *:每月的7号的6点5分执行一次;
7 8 9 10 *:每年执行次;每年的10月9号8点7分执行一次;
9 8 * * 3,7:每周三和周日的八点九分执行一次;
0 8,20 * * 3,7:每周三和周日的8点和20点执行一次;
0 9-18 * * 1-5:每周一到周五的早九点到晚18点执行一次;
*/5 * * * * :每5分钟执行一次某任务;
定时任务规范
- 计划任务脚本指定存放位置,便于维护和定期备份
- 写定时任务前必须在前面写注释,包括添加计划任务的人,添加任务的时间,任务有效期,计划任务脚本的对象,脚本的作用,以及其他需要提醒其他注意的事项
- 执行的脚本前加上/bin/bash或者/bin/sh,脚本必须使用完整的绝对路径
- 定时任务,需要尽量避免标准输出和标准错误输出结尾加上>/dev/null 2>&1(计划任务的标准输出和标准错误输出都会给root用户以邮件,很容易撑满磁盘消耗磁盘inode)
- 能用命令完成的也要写在脚本里
- 在指定用户下执行相关的定时任务
- 制定标准的书写规范
进程:学习进程就得先知道程序。程序,是一组指令以及参数集合,按照相应的逻辑控制计算计完成特性任务。
进程就是运行的程序,程序是静态而进程则是动态。
操作系统以进程为单位分配系统资源,每个进程运行时是独立的, 具有独立的地址空间,运行状态。
多个程序独立运行,每一个程序就是一个进程。
进程又可被分为线程,一个进程中可有多个线程,一个线程只被一个进程拥有。线程无法独立运行,但每个线程都有程序的入口,执行序列,程序的出口,它必须组成进程才能被执行;
在linux中,每个进程,线程都有其独立的资源集。
pstree 进程树
查看进程之间的关系,可以看出子进程,父进程
参数p可以显示进程号(pid)
ps 查看进程
-a:显示所有进程
-u:显示用户为主的进程
-x:和au配合使用,显示完整信息
pgrep 查找进程信息
-l:同时显示进程名和pid
-o:匹配多个进程时,显示进程号最小的
-n:匹配多个进程时,显示进程号最大的
kill 杀死进程
kill -9 进程号 强制杀死,没提示信息
杀死前
杀死后
killall(杀死同名进程)
kill -l 列出已知信息
vmstat
监控工具
r:等待执行任务数
b:等待IO进程数
si,so若不等于0则表示内存不足
bi,bo大,读写速率慢
in:每秒中端数
cs:每秒上下文切换次数
us:用户进程执行消耗cpu
id:空闲时间(包括io等待时间)
wa:io等待时间
st:系统等待时间
lsof 列出当前系统打开文件
-u:显示uname或pid的进程情况
-c:显示以字母开头的文件
-p:列出pid的进程打开的文件
-d:根据文件描述,列出文件信息(FD)
+d:显示目录下被进程开启的文件
+D:递归显示该目录下的所有文件及子目录下的文件
-i:符合条件的进程信息
lsof+文件:查看谁在使用这个文件
进程的优先级
从0到139,共140级。
0—99,有效的实时优先级(系统自己调用,人为不能调整)值越小,优先级越高。
100—139,非有效的实时优先级,静态优先级,值越小,优先级越高,可以调整nice来调整优先级
nice 相对优先级(-20—19)值越小,优先级越高;默认是0
调整nice值:top—输入r——enter— 输入PID——enter;——输入nice值,——enter
输入PID
输入nice值
修改成功
作业
将作业放到后台运行
jobs查看后台作业与终端,不同终端的作业在对应终端查看;
ctrl+z 挂起
kill %作业号 先终止再杀死作业
ping 192.168.3.55 &,已经在后台运行,在前台输出结果;不影响前台作业执行