系统服务daemons

1.daemon是一直运行的程序,提供系统或者网络服务,叫做守护进程

主要分类:

stand_alone:此 daemon 可以自行单独启动服务,如sshd,httpd

super daemon: 一支特殊的 daemon 来统一管理。 早期的 super daemon 是 inetd 这一个,后来则被 xinetd 所取代了。这种机制比较有趣的地方在于, 当没有用户端的要求时,各项服务都是未启动的情况,等到有来自用户端的要求时, super daemon 才唤醒相对应的服务。当用户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源。这种机制的好处是:

(1)由于 super daemon 负责唤醒各项服务,因此 super daemon 可以具有安全控管的机制,就是类似网路防火墙的功能

(2)由于服务在用户端的连线结束后就关闭,因此不会一直占用系统资源。

但是缺点是什么呢? 因为有用户端的连线才会唤醒该服务,而该服务载入到记忆体的时间需要考虑进去,因此服务的反应时间会比较慢一些啦,常见的有telnet服务

daemon 工作形态的类型:

  • signal-control
    这种 daemon 是透过信号来管理的,只要有任何用户端的需求进来,他就会立即启动去处理!例如印表机的服务 (cupsd)。
     
  • interval-control
    这种 daemon 则主要是‘每隔一段时间就主动的去执行某项工作’,所以,你要作的是在设定档指定服务要进行的时间与工作, 该服务在指定的时间才会去完成工作。我们在第十六章提到的 atd 与 crond 就属于这种类型的 daemon 啦 (每分钟侦测一次设定档)

服务与端口的对应:

/etc/services这个文档规定了服务和端口的对应关系,一般不要去改里面的设定

 

2.daemon 的启动脚本与启动方式

服务的启动涉及到很多方面,执行档、设定档、执行环境等等,所以需要一个shell脚本来启动服务,下面是一些重要文件位置:

  • /etc/init.d/* :启动脚本放置处
    系统上几乎所有的服务启动脚本都放置在这里!事实上这是公认的目录,我们的 CentOS 实际上放置在 /etc/rc.d/init.d/ 啦! 不过还是有设定连结档到 /etc/init.d/ 的!既然这是公认的目录,因此建议您记忆这个目录即可!
     
  • /etc/sysconfig/* :各服务的初始化环境设定档
    几乎所有的服务都会将初始化的一些选项设定写入到这个目录下,举例来说,登录档的 syslog 这支 daemon 的初始化设定就写入在 /etc/sysconfig/syslog 这里呢!而网路的设定则写在 /etc/sysconfig/network 这个档案中。 所以,这个目录内的档案也是挺重要的;
     
  • /etc/xinetd.conf, /etc/xinetd.d/* :super daemon 设定档
    super daemon 的主要设定档 (其实是预设值) 为 /etc/xinetd.conf ,里面的设定在具体服务的设定档里没有的情况生效,不过我们上面就谈到了, super daemon 只是一个统一管理的机制,他所管理的其他 daemon 的设定则写在 /etc/xinetd.d/* 里头喔!
     
  • /etc/* :各服务各自的设定档
    第六章就讲过了,大家的设定档都是放置在 /etc/ 底下的喔!
     
  • /var/lib/* :各服务产生的数据库
    一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中。举例来说,资料库管理系统 MySQL 的数据库预设就是写入 /var/lib/mysql/ 这个目录下啦!
     
  • /var/run/* :各服务的程序之 PID 记录处
    我们在第十七章谈到可以使用讯号 (signal) 来管理程序, 既然 daemon 是程序,所以当然也可以利用 kill 或 killall 来管理啦!不过为了担心管理时影响到其他的程序, 因此 daemon 通常会将自己的 PID 记录一份到 /var/run/ 当中!例如登录档的 PID 就记录在 /var/run/syslogd.pid 这个档案中。如此一来, /etc/init.d/syslog 就能够简单的管理自己的程序��。

3.服务的防火墙管理 xinetd, TCP Wrappers

简单的防火墙机制,通过设置/etc/hosts.allow, /etc/hosts.deny 这两个文件来实现。只要一个服务受到 xinetd 管理,或者是该服务的程式支援 TCP Wrappers 函数库的功能时,那么该服务的防火墙方面的设定就能够以 /etc/hosts.{allow,deny} 来处理。ldd命令可以查看服务所连接的函数库,ldd $(which sshd httpd)

这两个档案的判断依据是: (1) 以 /etc/hosts.allow 为优先,而 (2) 若分析到的 IP 或网段并没有记录在 /etc/hosts.allow ,则以 /etc/hosts.deny 来判断

TCP Wrappers 特殊功能:

可以在hosts.allow和hosts.deny两个设定档里面添加设置,实现更复杂的功能:

  • spawn (action)
    可以利用后续接的 shell 来进行额外的工作,且具有变数功能,主要的变数内容为: %h (hostname), %a (address), %d (daemon)等等;
     
  • twist (action)
    立刻以后续的指令进行,且执行完后终止该次连线的要求 (DENY)

 

3.系统开启的服务

ps,top,netstat都可以观察系统开启的服务,netstat -tulpn

设定开机后立即启动服务的方法:

chkconfig: 管理系统服务预设开机启动与否

  
  
  
  
  1. [root@www ~]# chkconfig --list [服务名称] 
  2. [root@www ~]# chkconfig [--level [0123456]] [服务名称] [on|off] 
  3. 选项与参数: 
  4. --list :仅将目前的各项服务状态列出来 
  5. --level:设定某个服务在该 level 下启动 (on) 或关闭 (off) 

chkconfig只是设置开机启动,并不能马上生效

 service 服务名 start | stop | restart

上述命令可以立刻生效,但是不会影响开机启动

chkconfig: 设定自己的系统服务

有时候,需要启动自己写的服务。首先,需要将启动脚本加入到/etc/init.d/中,如

  
  
  
  
  1. [root@www ~]# vim /etc/init.d/myvbird 
  2. #!/bin/bash 
  3. # chkconfig: 35 80 70 
  4. # description: 没啥!只是用来作为练习之用的一个范例 
  5. echo "Nothing" 

然后利用chkconfig来管理

  
  
  
  
  1. [root@www ~]# chkconfig [--add|--del] [服务名称] 
  2. 选项与参数: 
  3. --add :增加一个服务名称给 chkconfig 来管理,该服务名称必须在 /etc/init.d/ 内 
  4. --del :删除一个给 chkconfig 管理的服务 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(职场,守护进程,Daemon,休闲)