系统管理
进程管理的作用
管理正在运行的命令、程序和服务
作用:
1判断服务器的健康状态,管理不合理的进程,改善服务器性能;2管理查看系统中所有的进程;3杀死进程 ;
当前进程查看ps、显示Linux进程top、终止进程kill、修改进程优先级
当前进程查看ps
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 44580 7152 ? Ss 09:31 0:01 /usr/l
root 2 0.0 0.0 0 0 ? S 09:31 0:00 [kthre
root 3 0.0 0.0 0 0 ? S 09:31 0:00 [ksoft
ps aux:查看系统中的所有进程,使用BSD操作系统格式。(可以显示内存占比)
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 11145 ep_pol ? 00:00:01 syst
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthr
1 S 0 3 2 0 80 0 - 0 smpboo ? 00:00:00 ksof
1 S 0 6 2 0 80 0 - 0 worker ? 00:00:00 kwor
ps -le:查看系统中的所有进程,使用linux标准命令格式。(可以显示优先级)
tty1-6是字符终端,tty7是界面终端,远程终端使用的是pts/0来表示,可以有65535个远程终端。alt+F1-F7切换
显示Linux进程top
top - 09:55:01 up 23 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 340 total, 2 running, 338 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si,
KiB Mem : 1001332 total, 757536 free, 107444 used, 136352 buff/c
KiB Swap: 1048572 total, 1048572 free, 0 used. 749628 avail
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
2419 root 20 0 146384 2304 1472 R 0.3 0.2 0:00.64
1 root 20 0 44580 7152 2656 S 0.0 0.7 0:01.65
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02
3 root 20 0 0 0 0 S 0.0 0.0 0:00.07
top命令结果解释:每3秒刷新一次
第一行为任务队列信息:top - 系统当前时间,up 系统已运行的时长,users 当前登录的用户数量,load average 系统在之前1分钟,5分钟,15分钟的平均负载;
第二行为进程信息:tasks 系统中的进程总数,running 正在运行的进程数,sleeping 睡眠的进程数,stopped 停止的进程数,zombie 僵尸进程(应该停止却没有停止的进程);
第三行为CPU信息;
第四行是物理内存信息:total 物理内存总量(单位KB),used 已使用的,free 空闲的,buff/c buffer #缓冲,用于加速写入;cashed #缓存,用于加速读出。
第五行是交换分区的信息:主要看空闲交换分区的大小;
top -b -n 1 > /root/top.log 将执行的top命令结果输出到log日志文件中(top命令耗费资源比较大,应及时关闭)服务器应该正常地有计划地定时重启,可以排除一些故障。
杀死进程kill、pkill
1.查看所有信号: kill -l
[root@localhost ~]# 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
2平滑重启服务: 正常修改完配置文件后,需要重启服务,但是用普通的服务 restart会踢出正在使用的用户,用户体验差。而平滑重启是重启服务配置,保留正在使用的用户。 命令: kill -HUP(或-1) 进程号
常用杀死单一进程kill -9 PID;
3. kill 一次只能杀死一个进程。但是一个服务经常会开启很多进程(比如httpd,每登陆一个用户就会增加一个进程),因此一个个进程关闭太麻烦。
4. pkill 进程名可以批量杀死同一类型的进程
5. pkill -9 -t 终端号 : 可以用终端号踢出用户,先用w命令查看自己所在的终端名称,然后再踢出其他用户,只有root用户可以踢出其他账号,如果多root账号,遵循谁运行命令原则。
修改进程优先级内存优先级修改,作用不大,除非做内核裁剪或者嵌入式开发,否则修改优先级是没有太大作用的
Linux操作系统是一个多用户、多任务的操作系统,Linux系统中运行着非常多的进程。但是CPU在同一个时钟周期内只能运算一个指令,进程优先级决定了每个进程处理的先后顺序。
PR NI代表Priority Nice,两个值都是优先级,数字越小代表该进程优先级越高,NI值范围0-19 ,普通用户调整范围是0-19,且只能调整自己的进程,普通用户只能调高NI值,不能降低,root用户才能设定进程值为负数,且可以调整任何用户的进程PR(最终值)=PR原始值+NI 用户只能修改NI不能直接修改PR。
nice 命令 [选项]命令 #nice命令可以给新执行的命令直接赋予NI值,但是不能修改存在的NI值
选项-n NI值:给命令赋予NI值
例:nice -n -5 service httpd start
renice 命令,#修改已存在的进程的NI值的命令
例:renice -10 2125
系统管理
注意事项:
1、当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作
2、放入后台的命令必须可以持续运行一段时间,这样我们才能捕捉和操作这个工作
3、放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行
方法:
1.把进程放入后台,命令后面跟“&”加入后台运行或者Ctrl+z 暂停后台运行
top & #把命令放入后台,并在后台执行
top #按下ctrl+z快捷键,放在后台暂停
2.查看后台的工作
jobs 命令
jobs -l 能看到工作的PID,+ 代表最近一个进后台的,-代表倒数第二个,2个以上后台任务不显示+、-号
3.将后台暂停的工作恢复到前台执行
fg %工作号 %工作号:%可以省略,但是注意工作号和PID号的区别
4.把后台暂停的工作恢复到后台执行
bg %工作号 注意恢复后的命令不能和前台有交互
后台命令脱离终端执行
1)简介:把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,
后台程序就会停止
2)后台命令脱离登录终端执行的方法:
第一种方法 :把需要后台执行的命令加入 /etc/rc.local文件
第二种方法:使用系统定时任务,让系统在指定的时间执行某个后台命令
第三种方法:使用 nohup命令(常用)
nohup 命令 &
系统资源查看
1.vmstat命令监控系统资源(memory swap system io cpu等)
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 761448 2108 142496 0 0 24 2 27 43 0 0 99 0 0
vmstat[刷新延时 刷新次数]
例:vmstat 1 3
2.dmesg开机时内核检测信息
dmesg | grep cpu
#查看内存缓存swap使用情况
3.free命令查看内存使用状态
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1001332 95244 761452 13052 144636 754784
Swap: 1048572 0 1048572
free [-m][-g]
-m :以MB为单位显示
-g :以GB为单位显示(不满1g时显示精度丢失)
4. 查看cpu信息
cat/proc/cpuinfo
5.uptime与w命令
-#显示系统的系统时间,平均负载,当前登录用户数
,即top命令的第一行(top命令耗费资源)
[root@localhost ~]# uptime
10:40:43 up 1:09, 1 user, load average: 0.00, 0.01, 0.05**
w命令侧重用户信息的显示,显示了终端号ip,平均负载等
[root@localhost ~]# w
10:41:22 up 1:09, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.65.1 10:12 2.00s 0.17s 0.00s w
6.查看系统与内核相关信息
uname [选项]
选项:
-a :查看系统所有相关信息
-r :查看内核版本
小技巧:如何判断系统是32位还是64位
file /bin/ls
注:64位cpu仍可以安装32位系统,不能通过cpu位数来判断
7.查看发行版信息()
rpm -q centos-release
#查看发行版信息
8.列出进程打开或使用的文件信息(centos6)
lsof [选项]
#列出进程调用或打开的文件信息
选项:
-c 字符串 :只列出以字符串开头的进程打开文件
-u 用户名 :只列出某个用户的进程打开的文件
-p pid : 列出某个pid进程打开的文件
示例:
lsof | more
#查询所有进程-分屏显示
lsof /sbin/init
#查询/sbin/init文件被哪个文件调用(只能查系统文件,其他自己建立的文件查没有
意义)
lsof -c httpd
#查看httpd进程调用了哪个文件
lsof -u root
#按照用户名,查询某用户的进程所调用的文件名(数量可能很多)
at一次执行
1.确定at是否安装,
[root@localhost ~]# systemctl list-unit-files | grep atd
启动at服务(默认关闭)
[root@localhost ~]# systemctl status atd
2.at访问控制(root无效)
如果系统中有/etc/at.allow文件(白名单),那么只有在此名单下的用户可以使用at命令;
如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件(黑名单),那么在此名单下的用户不能使用at命令
如果系统这两个文件都不存在,那么只有root用户可以使用at命令
3.例子
at now +2 minutes #在两分钟后执行(内容在下一行写,必须写绝对路径)
at > /root/hello.sh #执行hello.sh脚本
4.atq #查询当前服务器上的at工作
atq [工作号] #删除指定的at任务
crontab循环定时任务
crontab循环定时任务
查询是否安装
[root@localhost ~]# systemctl list-unit-files | grep crond
启动
[root@localhost ~]# systemctl start crond
开机自启
[root@localhost ~]# systemctl enable crond
访问控制
如果系统中有/etc/cron.allow文件(白名单),那么只有在此名单下的用户可以使用cron命令;
如果系统中只有/etc/cron.deny文件(黑名单),那么在此名单下的用户不能使用cron命令【对root不起作用】
如果系统这两个文件都不存在,那么只有root用户可以使用cron命令
/etc/cron.deny文件(黑名单),那么在此名单下的用户不能使用cron命,对root无效。
crontab -l #查看当前用户的crontab任务
crontab -r #删除当前用户的所有的定时的任务
crontab -e: 格式: * * * * * command #进入crontab编辑界面,当前用户vim方式编辑
1、crontab五个星号的意义,其中第三个和四五尽量不要一起使用,如果一起使用则是或的关系
2、crontab后面的命令要用绝对路径(脚本中的命令也尽量要用绝对路径)
要想不锁定用户执行,需要写入 /etc/crontab文件内,比上文多一个用户的option
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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 格式
最小能识别分钟,最大能识别月,6个选项都不为空,不确定的用*代替,日期和星期最好不要在同一条命令中,命令最好(一定)用绝对路径执行。
系统定时任务:
1.把需要定时的执行的脚本复制到/etc/cron.{daily.weekly…}中的任意一个(推荐)
2.直接修改 /etc/crontab配置文件
例子:
*/10 2 4,5 10 * /root/hello.sh
10月四日和五日凌晨2点,每隔十分钟执行一次
anacron配置及总结
anacrontab是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行。
检测周期:
anacron会使用一天,七天,一个月作为检测周期;在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间;和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,证明有cron任务被执行。
CentOS 6.x的区别
在老的CentOS版本中,/etc/cron.{daily,weekly,monthly}这些目录会被cron调用,也会被anacron调用,容易重复执行
在CentOS 6.x中则只会被anacron调用,避免了重复执行
在CentOS 6.x中,anacron不在是服务而是系统命令
vi /etc/anacrontab #以下时解释
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthl
vi /usr/bin/run-parts
#!/bin/bash
# run-parts - concept taken from Debian
# keep going when something fails
set +e
if [ $# -lt 1 ]; then
echo "Usage: run-parts [--list | --test] <dir>"
exit 1
fi
while [ $# -gt 1 ]; do
case $1 in
--list)
list=1
shift
break
;;
--test)
test=1
shift
break
;;
--)
# -- end of options
shift
break
;;
*)
# directory
break
以cron.daily工作,说明执行过程
首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间,和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作;超过7天,执行cron.weekly,执行这个工作只能在03:00-22:00之间,执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间,使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件