常驻在内存中的进程,且提供一些系统功能,就是服务。这个进程称为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 --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 |
配置值:[使用者帐号] 若是 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 |
配置值:[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:关闭
开机显示效果