Linux学习记录--服务

服务


常驻在内存中的进程,且提供一些系统功能,就是服务。这个进程称为daemon.换另一种说法:服务包括一个提供系统功能的程序以及一个执行该程序的进程shell

每一个服务对应设备的一个端口vim


服务主要分类


按照服务的启动方式能够分为2类:安全

自启动的服务:大部分为开机就会启动的服务。每个服务都有一个进程进行控制bash

统一控制启动服务:由一个独立进程负责启动这些服务,至于什么时候启动由用户进行控制。这个独立的进程就是xinetd网络


统一控制启动服务也是一个自启动服务,只是其控制的服务不必定开机就启动dom


几个重要的目录

/etc/init.d/*:全部服务启动脚本存放处(学习shell script语法好去处)socket

/etc/sysconfig/*(各服务的初始化环境配置文件)tcp

/etc/xined.conf统一控制启动服务整体配置文件ide

/etc/xined.d/*统一控制启动服务配置文件(每一个服务的配置文件)学习

/etc/*:自启动服务各自的配置文件

/var/lib/*自启动服务各自的配置文件

/var/run/*:各个服务的程序的PID记录处


以自启动服务syslogd为例

[root@localhost~]# ll /etc/sysconfig/syslog /etc/init.d/syslog /etc/syslog.conf

-rwxr-xr-x1 root root 2043 2010-04-03 /etc/init.d/syslog =>记录程序文件

-rw-r--r--1 root root610 2010-04-03/etc/sysconfig/syslog =>记录初始化信息

-rw-r--r--1 root root938 02-14 10:10/etc/syslog.conf =>记录配置信息



自启动服务的操做

自启动服务在系统启动的时候可能会启动(须要配置),固然咱们也能够控制它的启动和中止以及如下其余操做。


直接执行服务脚本

前面说到全部服务的启动脚本都存放在/etc/init.d/* ,咱们就以syslog服务为例


syslog服务对应的shellscript

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        rhstatus
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        [ -f /var/lock/subsys/syslog ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
        exit 2
esac

经过以上能够粗略的看到这里包含6个方法(start,stop,rhstatus….) 调用这些方法的条件是 执行shell script 后面跟的参数(start|stop|status|restart|condrestart)

经过以上分析,若是咱们要知道一个服务有哪些操做,能够之间查看这个服务的脚本文件

[root@localhost init.d]# ./syslog status
syslogd (pid  3637) 正在运行...
klogd (pid  3640) 正在运行...
[root@localhost init.d]# ./syslog restart
关闭内核日志记录器:                                       [肯定]
关闭系统日志记录器:                                       [肯定]
启动系统日志记录器:                                       [肯定]
启动内核日志记录器:                                       [肯定]

经过service指令执行服务


语法:service[服务名称] 执行操做

    service --status-all


选项与参数:

执行操做:服务须要进行的工做(start|stop|status|restart….)

--status-all:将系统全部自启动服务显示


举例:

[root@localhost ~]# service syslog restart
关闭内核日志记录器:                                       [肯定]
关闭系统日志记录器:                                       [肯定]
启动系统日志记录器:                                       [肯定]
启动内核日志记录器:                                       [肯定]
[root@localhost ~]# service --status-all
acpid (pid 3901) 正在运行...
anacron 已停
atd (pid 4240) 正在运行...
auditd (pid  3609) 正在运行...
…….


统一控***务的操做


前面提到统一控***务是由一个特殊的进程(xinetd)来控制其余服务的行为


总体配置文件

若是针对个体服务配置文件未配置下面项目,那么服务的设置值将去下面内容做为默认值

[root@localhost etc]# vim /etc/xinetd.conf
defaults
{
# 服务启动成功或失败,以及相关登录行为的记录文件
        log_type        = SYSLOG daemon info  
        log_on_failure  = HOST  
        log_on_success  = PID HOST DURATION EXIT 
# 容许或限制联机的默认值
        cps         = 50 10  
        instances   = 50    
        per_source  = 10   
# 网络 (network) 相关的默认值
        v6only         
# 环境参数的配置
        groups         
        umask         
}


服务配置文件分析


举例:rsync是统一控***务中的一个,下面是这个服务的如下配置

[root@localhost etc]# vim /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = yes
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}


配置文件标识说明


= : 表示后面的配置参数就是这样
+= : 表示后面的配置为在原来的配置里头加入新的参数
-= : 表示后面的配置为在原来的参数舍弃这里输入的参数


如下图表来自鸟哥私房菜

attribute (功能)

说明与范例

通常配置项目:服务的识别、启动与程序

disable
(启动与否)

配置值:[yes|no],默认 disable = yes

,此值可配置该服务是否要启动若要启动就得要配置为[ disable = no ]

id
(服务识别)

配置值:[服务的名称]

虽然服务在配置文件开头[ service 服务名称]已经指定了,不过有时后会有重复的配置值,此时能够用 id 来取代服务名称。

server
(程序文件名)

配置值:[程序的绝对路径名]

这个就是指出这个服务的启动程序.例如 /usr/bin/rsync 为启动 rsync 服务的命令,因此这个配置值就会成为: [ server = /usr/bin/rsync ]

server_args
(程序参数)

配置值:[程序相关的参数]

这里应该输入的就是你的 server 那里须要输入的一些参数.例如 rsync 须要加入 --daemon , 因此这里就配置:[ server_args = --daemon ]。与上面 server 搭配,最终启动服务的方式[/usr/bin/rsync --daemon]

user
(服务所属UID)

配置值:[使用者帐号]

若是 xinetd 是以 root 的身份启动来管理的,那么这个项目能够配置为其余用户。此时这个 daemon 将会以此配置值指定的身份来启动该服务的程序。举例来讲,你启动 rsync 时会以这个配置值做为该程序的 UID。

group

跟 user 的意思相同.此项目填入组名便可。

通常配置项目:联机方式与联机封包协议

socket_type
(封包类型)

配置值:[stream|dgram|raw],与封包有关

stream 为联机机制较为可靠的 TCP 封包,若为 UDP 封包则使用 dgram 机制。raw 表明 server 须要与 IP 直接对谈.举例来讲 rsync 使用 TCP ,故配置为[socket_type = stream ]

protocol
(封包类型)

配置值:[tcp|udp],一般使用 socket_type 取代此配置

使用的网络协议,需参考 /etc/protocols 内的通信协议,通常使用 tcp 或 udp。因为与 socket_type 重复, 所以这个项目能够不指定。

wait
(联机机制)

配置值:[yes(single)|no(multi)],默认 wait = no

这就是咱们刚刚提到的 Multi-threaded 与 single-threaded .通常来讲,咱们但愿你们的要求均可以同时被激活,因此能够配置[ wait = no ] 此外,通常 udp 配置为 yes 而 tcp 配置为 no。

instances
(最大联机数)

配置值:[数字或 UNLIMITED]

这个服务可接受的最大联机数量。若是你只想要开放 30 我的联机 rsync 时,可在配置文件内加入:[ instances = 30 ]

per_source
(单一用户来源)

配置值:[一个数字或 UNLIMITED]

若是想要控制每一个来源 IP 仅能有一个最大的同时联机数,就指定这个项目吧.例如同一个 IP 最多只能连 10 条联机[ per_source = 10 ]

cps
(新联机限制)

配置值:[两个数字]

为了不短期内大量的联机要求致使系统出现忙碌的状态而有这个 cps 的配置值。第一个数字为一秒内可以接受的最多新联机要求, 第二个数字则为,若超过第一个数字那暂时关闭该服务的秒数。

通常配置项目:登陆文件的记录

log_type
(登陆档类型)

配置值:[登陆项目 等级]

当数据记录时,以什么登陆项目记载?且须要记载的等级为什么(默认为 info 等级)。

log_on_success
log_on_failure
(登陆状态)

配置值:[PID,HOST,USERID,EXIT,DURATION]

在[成功登录]或[失败登录]以后,须要记录的项目:PID 为纪录该 server 启动时候的 process ID , HOST 为远程主机的 IP、USERID 为登录者的帐号、EXIT 为离开的时候记录的项目、DURATION 为该用户使用此服务多久?

进阶配置项目:环境、网络端口口与联机机制等

env
(额外变量配置)

配置值:[变量名称=变量内容]

这一个项目可让你配置环境变量

port
(非正规埠号)

配置值:[一组数字(小于 65534)]

这里能够配置不一样的服务与对应的 port ,可是请记住你的 port 与服务名称必须与 /etc/services 内记载的相同才行.不过,若服务名称是你自定义的,那么这个 port 就能够随你指定

redirect
(服务转址)

配置值:[IP port]

将 client 端对咱们 server 的要求,转到另外一部主机上去. 例如当有人要使用你的 ftp 时,你能够将他转到另外一部机器上面去.那个 IP_Address 就表明另外一部远程主机的 IP .

includedir
(呼叫外部配置)

配置值:[目录名称]

表示将某个目录底下的全部文件都给他塞进来

安全控管项目:

bind
(服务接口锁定)

配置值:[IP]

这个是配置[容许使用此一服务的适配卡]的意思.举个例子来讲,你的 Linux 主机上面有两个 IP ,而你只想要让 IP1 可使用此一服务,但 IP2 不能使用此服务,这里就能够将 IP1 写入便可.那么 IP2 就不可使用此一 server

interface

配置值:[IP]

与 bind 相同

only_from
(防火墙机制)

配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

这东西用在安全机制上面,也就是管制[只有这里面规定的 IP 或者是主机名能够登录.]

no_access
(防火墙机制)

配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

跟 only_from 差很少.就是用来管理能否进入你的 Linux 主机激活你的 server 服务的管理项目. no_access 表示[不可登录]的 PC 啰.

access_times
(时间控管)

配置值:[00:00-12:00, HH:MM-HH:MM]

这个项目在配置[该服务 server 启动的时间],使用的是 24 小时的配置.例如你的 ftp 要在 8 点到 16 点开放的话,就是: 08:00-16:00。

umask

配置值:[000, 777, 022]

能够配置用户建立目录或者是文件时候的属性.系统建议值是 022 。


经过统一控***务启动一个服务


1.       将服务设置为启动

[root@localhost xinetd.d]# cat /etc/xinetd.d/rsync|sed 's/yes/no/g' >/etc/xinetd.d/tmp
[root@localhost xinetd.d]# vim tmp
[root@localhost xinetd.d]# cat ./tmp >./rsync 
[root@localhost xinetd.d]# cat ./rsync # default: off

# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}


2.       从新启动统一控***务进程,以重启咱们刚才更改的这个服务

[root@localhost etc]# service xinetd restart
中止 xinetd:                                              [肯定]
启动 xinetd:                                              [肯定]


3.       查看端口判断服务是否启用成功

[root@localhost xinetd.d]# cat /etc/services |grep 'rsync'
rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync
root@localhost xinetd.d]# netstat -tnlp|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10301/xinetd    

说明:全部服务端口在/etc/services能够查看到


设置服务开机启动


前面说到部分自启动服务会开机启动,经过xinetd进程控制的统一控***务也能够经过更改服务配置文件中disable=no,也能够控制其启动,

那么经过什么配置让咱们能够选择哪些服务开机就启动,哪些服务开机时不启动


语法:chkconfig--list

    chkconfig [--level [0123456]] 服务名称 [on|off]


参数与选项:

--list:查看全部服务开机启动状况

--level:启动级别(就是init后面那个数字,3为命令行模式,5为图形界面模式)


举例1:查看全部服务开机启动状况

[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
acpid           0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
anacron         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

基于 xinetd 的服务:
        chargen-dgram:  关闭
        chargen-stream: 关闭
        daytime-dgram:  关闭
tftp:           启用
=>能够看出xinetd进程控制的服务经过更改disable=no 也是能够设置开机启动的


举例2:设置服务开机启动

[root@localhost xinetd.d]# chkconfig --level 345 NetworkManager on
[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭


总结:1.对于自启动的服务来讲,经过chkconfig[--level [0123456]]可设置是否开机启动

            2.对于统一控制的服务,能够经过更改服务配置文件disable=no来设置开启启动


如何制做本身的服务



语法:chkconfig[--add|--del] 服务名称

选项与参数:

--add:添加一个服务到服务管理器

--del:删除一个服务从服务管理器


步骤1:建立一个程序,提供某种功能

说明:此程序执行文件必须在/etc/init.d/目录下


#!/bin/bash
# chkconfig: 35 80 70
# description:hello

echo "这是个人script. 参数是 $1"
=> chkconfig: 35 80 70其中,35指的是启动级别,80指的是启动顺序,70指的是结束顺序(由于服务启动与结束是有依赖关系的所以须要设置启动结束顺序)
=> description 添加服务描述信息

[root@localhost init.d]# ll myscript 
-rwxrwxrwx 1 root root 97 03-20 16:08 myscript

步骤2:添加服务到服务管理器

[root@localhost init.d]# chkconfig --add myscript 
[root@localhost init.d]# chkconfig --list myscript 
myscript        0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭


开机显示效果

Center

相关文章
相关标签/搜索