卡卡笔记之Linux Service 服务管理
 
独立服务程序
Xinetd服务程序
负责管理系统中不频繁使用的服务,这些进程在有请求时才由xinetd服备负责启动运行,一旦完成服务请求服务程序就结束运行,这种机制的设计目的是为了有效地减少对系统资源的占用率.
Xinetd配置文件内容
[root@localhost ~]# cat /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
        instances               = 60
        log_type                = SYSLOG authpriv
        log_on_success         = HOST PID
        log_on_failure           = HOST
        cps                     = 25 30
}
includedir /etc/xinetd.d  // includedir用来设置xinetd的启动配置文件目录
Xinetd启动配置目录
该目录中xinetd管理的每个服务都有独立的配置文件,文件名与服务名相同
[root@localhost ~]# ls /etc/xinetd.d/
若要查看krb5-telnet服务的启动配置文件
[root@localhost ~]# more /etc/xinetd.d/krb5-telnet
# default: off
# description: The kerberized telnet server accepts normal telnet sessions,
# but can also use Kerberos 5 authentication.
service telnet
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/kerberos/sbin/telnetd
        log_on_failure  += USERID
若要查看Time服务的启动配置文件
[root@localhost ~]# more /etc/xinetd.d/time
# default: off
# description: An RFC 868 time server. This protocol provides a \
#       site-independent, machine readable date and time. The Time \
#       service sends back to the originating source the time in \
#       seconds since midnight on January first 1900. This is the \
#       tcp version.
service time
{
        disable = yes
        type            = INTERNAL
        id              = time-stream
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
}
服务状态:
实现方法:chkconfig –list service_name
功能:查看系统中服务启动状态
[root@localhost ~]#chkconfig - -list
[root@localhost ~]#chkconfig - -list network
[root@localhost ~]#chkconfig network
重新启动运行的服务方法:
[root@localhost ~]#service xinetd restart
Line command 上实现对话模式的服务管理:
主法: 
[root@localhost ~]# ntsysv
注:Ntsysv可以设置所有服务程序的启动选项,包括受xinetd服务管理的服务,但是它只能设置当前运行级别的启动状态
Linux Process 进程管理
Free     //显示可用的内存空间
[root@localhost ~]# free
Mem行解释:
Mem行的used/free与(-/+ buffers/cache)行的 used/free区别:
Mem行是从OS的角度——对于OS,buffers/cached 都是属于被使用,其中包括:“内核(OS)使用”+“Application(X, oracle,etc)使用”+“buffers+cached”
 -/+ buffers/cache行所指的是从应用程序角度——对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需要用到内存的时候,buffer/cached会很快地被回收。
buffers与cached的区别:
- buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages;
也就是说,buffers是用来存储,目录里面有什么内容,权限等等
= cached是用来给文件做缓冲,即cached直接用来记忆我们打开的文件
Uptime  //显示系统负载程度
[root@localhost ~]# uptime
W       //显示当前主机中已登录的所有用户,以及用户当年所执行的命令
[root@localhost ~]# w
Jobs   //当前控制台中的后台进程
[root@localhost ~]#jobs
Fg    //恢复指定的后台进程到前台
[root@localhost ~]#jobs
[root@localhost ~]#fg 2
Ps    //列出进程
[root@localhost ~]# ps           //Process status
ps 选项参数
l    长格式输出;
u   按用户名和启动时间的顺序来显示进程;
j    用任务格式来显示进程;
f   用树形格式来显示进程;
a   显示所有用户的所有进程(包括其它用户);
x   显示无控制终端的进程;
r   显示运行中的进程;
ww 避免详细参数被截断;

[root@localhost ~]# ps -aux 
----------------------------------------------------------------------------------------------------------------------
USER 进程的属主;
PID   进程的ID;
PPID   父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI     进程的NICE值,数值大,表示较少占用CPU时间;
VSZ    进程虚拟大小;
RSS    驻留中页的数量;
WCHAN
TTY    终端ID
STAT   进程状态
D      Uninterruptible sleep (usually IO)
R      正在运行可中在队列中可过行的;
S     处于休眠状态;
T     停止或被追踪;
W     进入内存交换(从内核2.6开始无效);
X      死掉的进程(从来没见过);
Z      僵尸进程;
<     优先级高的进程
N     优先级较低的进程
L     有些页被锁进内存;
s     进程的领导者(在它之下有子进程);
l      is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+     位于后台的进程组;
WCHAN     正在等待的进程资源;
START      启动进程的时间;
TIME      进程消耗CPU的时间;
COMMAND  命令的名称和参数;
----------------------------------------------------------------------------------------------------------------------
[root@localhost ~]# ps aux |grep httpd   // 与grep 结合,提取指定程序的进程
[root@localhost ~]# ps auxf |grep httpd  // 父进和子进程关系
Pgrep判断程序是否正在运行
-l 列出程序名和进程ID
-o 进程起始的ID
-n 进程终止的ID
[root@localhost ~]# pgrep –lo httpd  //
[root@localhost ~]# pgrep –ln httpd  //
[root@localhost ~]# pgrep -l httpd    //
更详细显示进程列表
[root@localhost ~]# ps –l  //Long
显示自已的进程数据
[root@localhost ~]# ps –u  //User 
显示指指定用户的进程数据
[root@localhost ~]# ps -U oracle
查看后台进程
[root@localhost ~]# ps –x
Top  //显示CPU利用率,进程状态,内存使用情况
[root@localhost ~]#top
Free //用于显示系统内存使用情况,包括内存总量、已使用内存数量、空间内存数量等信息.
[root@localhost ~]# free
终止系统中的进程
终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。
另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。
为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld 这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill 来杀掉。
/Kill进程 
如果进程运行过程中出现死机或消耗了太多的系统资源,如内存数量及CPU时间,就可以使用Kill命令将指定的信息发送到该进程
[root@localhost ~]# kill -l
若要终止PID=16525的运行:
[root@localhost ~]#kill 16525
由于有些程序会捕捉某些信号,所以在直接指定PID,但却不能终止其进程时,可以使用-9参数发出SIGKILL信号.
[root@localhost ~]#kill -9 16525 式  // 9 SIGKILL   
僵尸进程,用kill -9 来强制终止退出
[ root@localhost ~]# ps aux |grep gaim
[root@localhost ~]# pgrep -l gaim5031 gaim
[root@localhost ~]# kill -9 5031
若还是无法终止,则使用-15参数发出SIGTERM信号
[root@localhost ~]#kill -15 16525    // 15 SIGTERM
1.停止系统中的进程运行
[root@localhost ~]#ps|grep vi
[root@localhost ~]#kill 7740
1. 强制停止系统中的进程运行
[root@localhost ~]#ps|grep vi
 [root@localhost ~]#kill -9 7740
/Killall 如何系统中存在相同名称的多个进程则这些进程将全部结束
1. 停止指定名称的进程
[root@localhost ~]#ps|grep vi
[root@localhost ~]#killall vi
2. 强制停止指定名称的进程
[root@localhost ~]#ps|grep vi
[root@localhost ~]#killall -9 vi