4.1 定时任务
linux定时任务由crond这个服务管理,Crond每分钟执行三个位置的脚本:
-
/etc/crontab
:系统相关的,由root直接编写 -
/etc/cron.d/*
:自定义的软件相关 -
/var/spool/cron/*
:用户用crontab -e
命令编写的定时任务。
定时任务执行的日志位于:/var/log/cron
关于crontab -e
日期编写:,
表示多个时间,-
表示一段时间,*/5
表示每5个时间单位做一次。
4.2 任务管理
在一个shell中,如果任务都在前台执行,那一个shell只能执行一个任务,效率低下。一种方式是将任务放到【后台】执行,但注意这里的后台指的是shell的后台,也是shell的子进程,并非是系统的后台。
-
&
:只需在命令后面加入这个符号,即可转入后台执行,但是stdout和stderr依然会输出到前台命令行上。在执行结束后,也会有任务结束的提示。 -
jobs
:任务执行时,会产生一个job id,注意不是pid,上述后台执行时,会产生类似[1] 19888
类似的输出,表示的就是job id和pid。jobs
这个命令就是显示所有后台任务的状态和对应的命令,参数-l
会额外显示pid。 -
[ctrl]+z
:这个热键可以将前台正在执行的任务暂停,放到后台去; -
fg %job id
:这个命令将一个后台任务拿到前台来继续执行; -
bg %job id
:这个命令将一个后台任务在后台继续执行,相当于给命令后面加了一个&
。 -
kill %job id
:可以杀掉一个任务,常见的参数有-1
重启进程,-9
强制杀掉,-19
暂停运行([ctrl]+z
)-
killall bash
:可以杀掉用bash启动的所有任务,通常用来终止任务; - 但注意
kill
并不是杀掉的意思,而是向进程发送信号。
-
-
nohup
:上面我们提到,即使放到后台,也是shell的后台,一旦shell关掉了,所有的任务也就都关了。为了避免和shell关联,可以用nohup
。但是注意nohup
是不支持shell内置命令的。
4.3 进程管理
进程有五种状态:R
:running(运行),S
:sleeping(挂起),D
:阻塞,T
:后台暂停状态或者在跟踪状态,Z
:僵尸状态。
-
ps -l
:当前shell的相关进程,ps aux
查看所有运行的进程。 -
pstree -p
:进程树- 能观察到所有进程都是1号进程
systemd
的子进程。
- 能观察到所有进程都是1号进程
-
top
:-
f
调显示的项目; -
1
:查看各个CPU的负载情况; -
-p pid
:参数可以查看某一个进程的情况 -
e
和E
用来调内存单位; -
M
按照内存使用排序,P
按照CPU使用排序; -
VIRT
:进程申请使用的内存,不是实际使用的,意义不大; -
RES
:进程的常驻内存,包含SHR
,但不包含SWAP
; -
SHR
:多核之间的共享内存,通常是共享库函数; -
TIME+
:累计CPU时间,注意不是运行时间,是占用CPU的时间,多核程序会累计在多个CPU上的时间。 - 系统负载和每秒内运行的任务数相关。
-
- 进程的优先级:进程一般都有一个优先级,由linux计算,值越小越先执行,具体来说会有一个PR值,由系统设置无法改动,还有一个NICE值(NI),可以由用户微调。使用
nice
和renice
命令可以调整。 -
free -m
查看内存信息 -
netstat
:查看网络信息,分成两部分,一部分是真的网络连接(type为tcp/udp),一部分是本机的进程间通信(IPC,type为unix):- 网络连接:
-
Recv-Q
:接收队列中的消息包数量,Send-Q
:发送队列
-
- 本地socke
-
RefCnt
:关联的进程数; -
Path
:关联的进程路径
-
-
netstat -ltunp
:列出正在侦听的网络连接。
- 网络连接:
-
dmseg
:里面存在内核启动时的信息; -
vmstat
:能对当下系统资源做监控。 - 有关
/proc
目录下的信息:- 每个进程对应的pid都有一个目录,存储着进程相关信息。比较典型的
cmdline
存储启动命令,environ
存储环境变量。 -
/proc
下面还存储着相当多的其他信息,包括cpu,内核版本,文件系统,挂在分区,驱动,等等,是很多命令读取的来源地。
- 每个进程对应的pid都有一个目录,存储着进程相关信息。比较典型的
-
fuser -v
:可以通过文件找出使用该文件的所有进程; -
lsof
:查看进程使用的文件和设备,侦听的端口。- 参数
-p
:指定pid;参数-c
指定命令的名称,支持正则表达式。 -
lsof + 文件名
:也可以查看打开该文件的进程,+d
表示不递归查询目录,+D
则会递归查询。 -
lsof -i
可以查看与网络相关的连接,后面可以接具体端口号,比如lsof -i:22-25 -nP
,-P
可以显示具体的端口号,-n
显示具体ip。
- 参数
4.4 服务管理
linux中服务就是后台守护进程,可能是一个,也可能是多个。
-
服务的类型:
-
.service
:一般服务类型,主要是系统服务。 -
.socket
:内部程序IPC的服务。 -
.target
:一组.service和/或.socket服务打包成的。 -
.mount
:挂载相关的;.path
:检测特定目录的服务;.timer
:循环执行的服务。
-
- 网络服务还会额外对应端口,对应规则在
/etc/services
。 -
服务管理:
systemctl [command] [xxx.service/target]
-
start
,stop
,restart
:启动,停止,重启; -
reload
:重新加载配置; -
enable
,disable
:开机自启动, 非自启动; -
status
:状态
-
-
查看所有的服务:
systemctl
-
--all
:也列出没启动的服务
-
-
服务的状态:
-
running
:运行中; -
exited
:一次性服务,已经结束; -
listening
:等待其他事件触发的服务; -
inactive
:挂掉的服务。
-