所谓daemon和service事实上这两者没有什么区别,因为要达成某个服务是需要一个daemon在后台运行,所以没有daemon就没有service。

daemon的主要分类

daemon的主要分类:可分为独立启动stand_alone和通过super daemon 来统一管理这两大类.

stand_alone 此daemon可以单独自行启动服务 常见的有httpd ftp等等

super daemon 一个特殊的daemon来统一管理,早起的super daemon是一个inetd 后来被一个xinetd所代替,这种机制的好处就是它具有安全控管的机制,类似与网络防火墙,另外由于服务是在客户端连接结束后就关闭,因此不会占用系统资源,缺点就是反映的时间比较慢,常见的有我们的telnet.

daemon的工作形态类型

大致可分为两种:一种是signal-control 一种是interval-control

singnal-control:通过信号来管理,只要有任何客户端的请求进来,他就会立即启动去处理

interval-control:每隔一段时间就主动去执行某项任务,只要在配置文件指定服务器进行时间和工作,该服务就在指定时间去完成。

通常我们知道linux下很多服务后边都带d,比如hpptd,vsftpd,这个d其实就是daemon.


服务与端口的对应

/etc/services


daemon的启动脚本和启动方式

启动脚本放置位置:/etc/init.d/*

系统上几乎所有的服务启动脚本都放置在这里,在centos中放在/etc/rc,d/init.d/不过还是有链接文件到/etc/init.d/

各服务的初始化环境配置文件

/etc/sysconfig/*

几乎所有服务的初始化的一些参数都在这个目录下,比如日志syslog会写在/etc/sysconfig/syslog,还有网络配置的/etc/sysconfig/network

super daemon配置文件

/etc/xinetd.conf  /etc/xinetd.d/*

super daemon 的主要配置文件是xinetd.conf  其他的daemon写在后者

各个服务的配置文件

/etc/*

服务产生的库文件

/etc/lib/*

各服务程序的PID记录处

/var/run/*


stand alone的/etc/init.d/启动

以日志文件启动脚本为例子

/etc/init.d/syslog 什么参数都不带,系统会告诉你那些参数可以使用

Usage: /etc/init.d/syslog {start|stop|status|restart|condrestart}

查看下syslog这个daemon目前的状态

/etc/init.d/syslog status

syslogd (pid  1793) is running...

klogd (pid  1796) is running...

我们可以看到syslog管理2个daemon


如果重新让syslog读取一次配置文件

/etc/init.d/syslog restart

Shutting down kernel logger:                               [  OK  ]

Shutting down system logger:                               [  OK  ]

Starting system logger:                                    [  OK  ]

Starting kernel logger:                                    [  OK  ]

/etc/init.d/syslog status 

syslogd (pid  5330) is running...

klogd (pid  5333) is running...

重启服务过后我们会发现pid就不一样了


通常我们在重启服务是用到的service其实是一个脚本

service [service name] start stop restart......

service --status-all 可以让系统所有的stand alone 服务列出来


super daemon的启动

其实super daemon本身也是一个独立的服务,因此他的启动和独立服务一样,但是他还要管理后续的其他daemon,必须在配置文件中设置为启动该daemon才行

如何得知super daemon所管理的服务是否启动?

grep -i `disable` /etc/xinetd.d/*


比如rsync如果我想启动rsync服务可以这样做:

vim /etc/xinetd.d/rsync

将里边的disable=no 改为yes

然后重启/etc/init.d/xinetd restart

查看启动端口:grep `rsync` /etc/services

发现是873号端口

netstat -tunlp | grep 873 发现竟然是xinetd  因为xinetd要管理rsync



系统开启服务

查看系统已启动的服务方法很多,最常用的就是netstat,一般来说用ps查看整个系统上的服务比较妥当,如果想查看启动网络监听服务的话,使用netstat。

service --status-all 查看所有服务状态

netstat -tulp  目前开启的网络服务


设置开机启动服务

chkconfig 管理系统服务默认开机启动与否

chkconfig --list 服务名 来查看当前服务

--level 设置某个服务在该level下on or off

level级别0-6

      等级0表示:表示关机
      等级1表示:单用户模式
      等级2表示:无网络连接的多用户命令行模式
      等级3表示:有网络连接的多用户命令行模式
      等级4表示:不可用
      等级5表示:带图形界面的多用户模式
      等级6表示:重新启动

让httpd 服务为3,5 启动

chkconfig --level 35 httpd on


另外还有一个图形界面的命令:ntsysv 只是红帽系统独有的


chkconfig设置自己的系统服务

--add --del 服务名称

只要在/etc/init.d/创建一个自己想要的服务名

chkconfig --add 服务名 就OK

添加成功可以使用--list 来查看进行测试

最后测试完记得删除该服务文件