一,linux定时任务
1,概念
未来的某个时间执行一次任务,或者周期性执行某个任务,执行结果会通过邮件通知。
2,分类
定时任务:at batch
周期性任务:contab
3,系统任务调度
指系统周期内所要执行的任务,系统任务调度的配置文件为:/etc/crontab
4,用户任务调度
指用户定期所要执行的文件,用户任务调度的配置文件为:/var/spool/cron
5,mail发送格式
mail -s “邮件主题” -c “抄送地址” -b“密送地址” -f 发送人地址 -F发送人姓名 < “test”
echo “test” | mail -s test 发送地址
6,at命令
(1)时间定义
hh:mm 例如:12:00
noon,teatime A
M,PM,8am,9pm
2019-8-11,2019/8/11
+5minutes,hours,days,weeks today,tomorrow
(2)语法结构
用法: at 选项 参数
-q | 使用指定队列queue存储 |
---|---|
-f | 从文件中读取 |
l,atq | 列出任务 |
-d,atrm | 删除待处理作业 |
-v | 列出已执行未被删除的任务 |
-V | 版本号 |
-c | 查看作业内容 |
实例:
1,[root@demo3 ~]# at now +4 minutes (创建一个任务)
at> echo "hello" >test
at> <EOT>
job 4 at 2019-08-14 18:14
You have new mail in /var/spool/mail/root
2,[root@demo3 ~]# atq (列出任务)
4 2019-08-14 18:14 a root
3,[root@demo3 ~]# at -c 4 (查看作业内容)
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=demo3; export HOSTNAME
……
${SHELL:-/bin/sh} << 'marcinDELIMITER0a37b906'
echo "hello" >test
marcinDELIMITER0a37b906
4,[root@demo3 ~]# at -V (查看版本号)
at version 3.1.10
5,[root@demo3 ~]# atrm 5 (删除待处理作业)
7,crontab命令
(1)查看/etc/crontab配置文件
(2)时间表示法:
(1)特定值
如:一月一号的8:40执行一次——40 8 1 1 *
(2)*
如:每分钟执行一次——* * * * *
(3)连续值:9-17
如:早上八点到12点执行一次——0 8-12 * * *
(4)离散值:8,10,12
如:每周的周一,周三,周五,周日12点执行一次——0 12 * * 1,3,5,7
(5)定义时间点 时间步长(注意:定义步长需要能被整除)
如:早上八点到12点每隔一小时执行一次——0 8-12/1 * * *
(3)crontab语法结构
-e | 编辑任务 |
---|---|
-l | 列出任务列表 |
-r | 移除任务 |
-i | 移除时确认,与-r一起使用 |
-u | 用户 |
[root@demo3 ~]# crontab -e (编辑任务)
no crontab for root - using an empty one
crontab: installing new crontab
[root@demo3 ~]# crontab -l (列出任务列表)
#列出test的的列表
*/1 * * * * ls ./test
#列出test的所有隐藏列表
0 8-12 * * * ll -a ./test
[root@demo3 ~]# crontab -ri (删除任务,-i表示移除前询问)
crontab: really delete root's crontab? y
You have new mail in /var/spool/mail/root
注:在做计划任务时要规范:
1,脚本要规范,脚本存放位置要规范,便于维护
2,定时任务要写注释
3,执行脚本要带绝对路径
4,执行结果的标注输出或者错误输出>/dev/null
5,可以以命令执行完成的任务,也要写在脚本中
6,分用户执行
二,进程
1,程序
定义:一组指令以及参数集合,按照相应的逻辑控制计算计完成特性任务。
linux程序组成:系统,用户,固件
特点:静态的,封闭的。
程序与进程关系:程序——>运行——>进程1,进程2…
2,进程
定义:运行的程序,动态。
特点:动态的;具有生命周期,状态 ;并发行;交互性
操作系统以进程为单位分配系统资源
具有独立的地址空间,运行状态 ;
程序与进程关系:一个程序可产生多个进程 ;
3,线程
特点:
(1)在linux中,每个进程,线程都有其独立的资源集;
(2)线程把整个任务完成后才能运行
线程与进程关系:
(1)一个进程中可有多个线程,一个线程只被一个进程拥有
(2)线程无法独立运行,但每个线程都有程序的入口,执行序列,程序的出口,它必须组成进程才能被执行;
4,进程的生命周期
注:在子进程运行过程中可能会产生僵死状态和孤儿状态:
僵死状态:子进程终止退出,它的资源已被释放,但是父进程没有调用wait()系统,取得子进程的终止状态。此时子进程虽然退出,但系统进程表中仍保留着它的一些信息。
孤儿状态:在子进程还未退出前,父进程就已退出。
5,进程的管理工具
(1)pstree 进程树 —— 查看进程之间的关系
《1》pstree
[root@demo3 ~]# pstree
init─┬─atd
├─auditd───{auditd}
├─crond
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
└─udevd───2*[udevd]
《2》pstree -p:显示pid
[root@demo3 ~]# pstree -p (显示PID)
init(1)─┬─atd(1393)
├─auditd(1172)───{auditd}(1173)
├─crond(1378)
├─login(1406)───bash(1424)
├─master(1364)─┬─pickup(1724)
│ └─qmgr(1375)
├─mingetty(1408)
├─mingetty(1410)
├─mingetty(1414)
├─mingetty(1418)
├─mingetty(1420)
├─rsyslogd(1194)─┬─{rsyslogd}(1195)
│ ├─{rsyslogd}(1197)
│ └─{rsyslogd}(1198)
├─sshd(1284)─┬─sshd(1439)───bash(1445)───pstree(1783)
│ └─sshd(1443)───sftp-server(1462)
└─udevd(510)─┬─udevd(1415)
└─udevd(1416)
《3》pstree -u:显示每个进程所属账号名字
[root@demo3 ~]# pstree -u (显示每个进程所属账号名字)
init─┬─atd
├─auditd───{auditd}
├─crond
├─login───bash
├─master─┬─pickup(postfix)
│ └─qmgr(postfix)
├─5*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───sftp-server
└─udevd───2*[udevd]
(2)ps——显示进程信息
《1》 -a显示所有进程
[root@demo3 ~]# ps -a
PID TTY TIME CMD
1785 pts/0 00:00:00 ps
《2》 -u:显示用户为主的进程
[root@demo3 ~]# ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1408 0.0 0.0 4064 588 tty2 Ss+ 17:01 0:00 /sbin/mingetty
root 1410 0.0 0.0 4064 592 tty3 Ss+ 17:01 0:00 /sbin/mingetty
root 1414 0.0 0.0 4064 592 tty4 Ss+ 17:01 0:00 /sbin/mingetty
root 1418 0.0 0.0 4064 592 tty5 Ss+ 17:01 0:00 /sbin/mingetty
root 1420 0.0 0.0 4064 592 tty6 Ss+ 17:01 0:00 /sbin/mingetty
root 1424 0.0 0.1 108312 1888 tty1 Ss+ 17:01 0:00 -bash
root 1445 0.0 0.1 108316 1956 pts/0 Ss 17:02 0:00 -bash
root 1798 0.0 0.1 110236 1176 pts/0 R+ 20:02 0:00 ps -u
……
《3》 -x:和au配合使用,显示完整信息
[root@demo3 ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19232 1484 ? Ss 17:00 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 17:00 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 17:00 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 17:00 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 17:00 0:00 [stopper/0]
《4》 -l:将pid的信息较长较详细的列出来
[root@demo3 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1445 1439 0 80 0 - 27079 wait pts/0 00:00:00 bash
4 R 0 1801 1445 0 80 0 - 27033 - pts/0 00:00:00 ps
(3)pgrep ——查找进程信息
《1》 -l:同时显示进程名和pid
[root@demo3 ~]# pgrep -l httpd
1861 httpd
1862 httpd
1863 httpd
1864 httpd
《2》 -o:匹配多个进程时,显示进程号最小的
[root@demo3 ~]# pgrep -l -o httpd
1861 httpd
《3》 -n:匹配多个进程时,显示进程号最大的
[root@demo3 ~]# pgrep -l -n httpd
1864 httpd
(4)kill ——杀死某个进程
用法: kill 选项 pid
《1》 -9 :强制终止进程
[root@demo3 ~]# ps -ef |grep httpd
daemon 1862 1 0 20:14 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 1863 1 0 20:14 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 1864 1 0 20:14 ? 00:00:00 /usr/local/apache/bin/httpd -k start
root 1967 1808 0 20:37 pts/1 00:00:00 grep httpd
[root@demo3 ~]# kill -9 1862
[root@demo3 ~]# ps -ef |grep httpd
daemon 1863 1 0 20:14 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 1864 1 0 20:14 ? 00:00:00 /usr/local/apache/bin/httpd -k start
root 1969 1808 0 20:37 pts/1 00:00:00 grep httpd
《2》 -w:等待进程死亡
《3》 -l:列出已知信息
[root@demo3 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
《4》 -15:正常终止进程 (默认)
《5》 -u:指定用户
注:
-0:只查看状态,不杀,常来检测进程是否存在,echo$?
killall:会杀死同名的进程
pkill :是kill和ps命令的集合,按照进程名来杀死进程
(5)htop——查看进程,监控软件
注:htop在安装前需要先安装epel rpm包。
安装epel源
[root@demo3 ~]# yum install https://dl.fedoraproject.org/pub/epel-release-latest-6.noarch.rpm
安装htop
[root@demo3 ~]# yum install htop
[root@demo3 ~]# htop
(6)vmstat——监控工具
[root@demo3 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 680448 21508 159224 0 0 12 3 11 12 0 0 99 0 0
字段含义:
选项 | 含义 |
---|---|
r | 等待执行的任务数 |
b | 等待io进程数 |
swpd | 正在使用虚拟的内存大小(值大于0表示内存不足) |
free | 空闲内存大小 |
buff | 已用buff大小 |
cache | 已用cache大小 |
si | 每秒从交换区写入内存的大小 |
so | 每秒从内存写入交换区大小 |
bi | 每秒读取的块数 |
bo | 每秒写入的块数 |
in | 每秒中断shu |
cs | 每秒上下文切换数 |
us | 用户进程消耗cpu时间 |
sy | 系统进程消耗cpu时间 |
id | 空闲时间 |
wa | io等待时间 |
st | 系统等待时间 |
(7)lsof——列出当前系统打开文件
《1》-u:显示uname或pid的进程情况
[root@demo3 ~]# lsof -u root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 524338 /sbin/i nit
init 1 root mem REG 8,2 65960 2622 /lib64/ libnss_files-2.12.so
《2》-c:显示以字母开头的文件
[root@demo3 ~]# lsof -c t
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ttm_swap 112 root cwd DIR 8,2 4096 2 /
ttm_swap 112 root rtd DIR 8,2 4096 2 /
《3》-p:列出pid的进程打开的文件
[root@demo3 ~]# lsof -p 1825
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sftp-serv 1825 root cwd DIR 8,2 4096 524292 /root
sftp-serv 1825 root rtd DIR 8,2 4096 2 /
sftp-serv 1825 root txt REG 8,2 67640 7402 /usr/libexec/openssh/sftp-server
sftp-serv 1825 root mem REG 8,2 65960 2622 /lib64/libnss_files-2.12.so
sftp-serv 1825 root mem REG 8,2 43944 2634 /lib64/librt-2.12.so
《4》-d:根据文件描述,列出文件信息(FD)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root 2u CHR 1,3 0t0 4601 /dev/null
udevd 510 root 2u CHR 1,3 0t0 4601 /dev/null
auditd 1172 root 2u CHR 1,3 0t0 4601 /dev/null
rsyslogd 1194 root 2w REG 8,2 5917 394171 /var/log/secure
sshd 1284 root 2u CHR 1,3 0t0 4601 /dev/null
《5》+d:显示目录下被进程开启的文件
[root@demo3 ~]# lsof +d /root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1424 root cwd DIR 8,2 4096 524292 /root
bash 1445 root cwd DIR 8,2 4096 524292 /root
bash 1808 root cwd DIR 8,2 4096 524292 /root
sftp-serv 1825 root cwd DIR 8,2 4096 524292 /root
lsof 2054 root cwd DIR 8,2 4096 524292 /root
lsof 2055 root cwd DIR 8,2 4096 524292 /root
《6》+D:递归显示该目录下的所有文件及子目录下的文件
[root@demo3 ~]# lsof +D /root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1424 root cwd DIR 8,2 4096 524292 /root
bash 1445 root cwd DIR 8,2 4096 524292 /root
bash 1808 root cwd DIR 8,2 4096 524292 /root
sftp-serv 1825 root cwd DIR 8,2 4096 524292 /root
lsof 2056 root cwd DIR 8,2 4096 524292 /root
lsof 2057 root cwd DIR 8,2 4096 524292 /root
《7》 -i:符合条件的进程信息(端口要加:)
[root@demo3 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1284 root 3u IPv4 12375 0t0 TCP *:ssh (LISTEN)
sshd 1284 root 4u IPv6 12381 0t0 TCP *:ssh (LISTEN)
sshd 1439 root 3r IPv4 13274 0t0 TCP 192.168.3.55:ssh->192.168.3.1:60996 (ESTABLISHED)
sshd 1802 root 3r IPv4 16406 0t0 TCP 192.168.3.55:ssh->192.168.3.1:64923 (ESTABLISHED)
sshd 1806 root 3r IPv4 16467 0t0 TCP 192.168.3.55:ssh->192.168.3.1:64926 (ESTABLISHED)
[root@demo3 ~]# lsof -i tcp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1284 root 3u IPv4 12375 0t0 TCP *:ssh (LISTEN)
sshd 1284 root 4u IPv6 12381 0t0 TCP *:ssh (LISTEN)
master 1364 root 12u IPv4 12571 0t0 TCP localhost:smtp (LISTEN)
master 1364 root 13u IPv6 12574 0t0 TCP localhost:smtp (LISTEN)
《8》lsof+文件:查看谁在使用这个文件
[root@demo3 ~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1197 root 1w REG 8,2 195612 394170 /var/log/messages
(8)程序优先级(0—139)
0—99,有效的实时优先级(系统自己调用,人为不能调整),值越小,优先级越高。
100—139,非有效的实时优先级,静态优先级,值越小,优先级越高。
相对优先级nice(-20—19)值越小,优先级越高;默认是0
调整nice值:
《1》通过top调整
进入top中,输入r出现PID to renice一行,输入要修改的PID,enter
出现Renice PID 12 to value:,输入要修改的nice值,再enter即可
注:输入的nice值在[-20,19]的范围外,若小于-19,则nice值为-19,若大于20,则nice值为20.
《2》通过renice调整
[root@demo3 ~]# renice 0 12
12: old priority 19, new priority 0
[root@demo3 ~]# top
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
《3》通过htop调整
[root@demo3 ~]# htop
点击F7减nice值,F8增加nice值
(9)进程和作业
进程和作业的关系
一个作业可有多个进程组成;
shell可运行一个前台作业和多个后台作业
《1》将作业放在后台——&
[root@demo3 ~]# ping 192.168.3.55 >/dev/null 2>&1 &
[1] 2081
《2》查看作业——jobs
[root@demo3 ~]# jobs
[1]+ Running ping 192.168.3.55 > /dev/null 2>&1 &
注:jobs查看后台作业与终端,不同终端的作业在对应终端查看;
《3》后台作业放到前端——fg %job编号
[root@demo3 ~]# fg %3
ping 192.168.3.55 > /dev/null
注:可以不加%
《4》把后台作业运行起来——bg %job编号
[root@demo3 ~]# jobs
[2]+ Stopped sleep 2000
[root@demo3 ~]# bg %2
[2]+ sleep 2000 &
[root@demo3 ~]# jobs
[2]+ Running sleep 2000 &
注:可以不加%
《5》终止正在运行的作业——ctrl+z
[root@demo3 ~]# fg %2
sleep 2000———————输入ctrl+z
^Z
[2]+ Stopped sleep 2000
《6》杀死后台作业——kill %job编号
[root@demo3 ~]# jobs
[2]+ Running sleep 2000 &
[root@demo3 ~]# kill %2
[root@demo3 ~]# jobs
[2]+ Terminated sleep 2000
[root@demo3 ~]# jobs
注:一定要加%