所谓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 来查看进行测试
最后测试完记得删除该服务文件