Linux系统服务——Daemon

什么是Daemon?

Daemon是Linux的一些系统服务,它们是一些常驻内存的进程。

Daemon分类

Daemon拥有两种分类方式,按照“daemon是否可以在内存中独立启动”可以分为:stand alone和super daemon;按照“请求到来时是否能够立即运行”可分为:signal-control和interval-control。下面详细介绍两种分类方式。

分类方式一:按照“是否可以独立启动”分类

  1. stand alone类型的daemon 这种类型的daemon可以自行启动,启动之后可以常驻内存,直到手动关闭该daemon才释放资源。
  2. 由super daemon管理的daemon 这种类型的daemon由super daemon统一管理,当请求到来时,由super daemon启动请求的服务,请求完成后便释放内存资源。

两者的区别:

  • stand alone类型的daemon可以自行启动,无需依赖其他daemon;而super daemon管理的daemon必须借助super daemon来启动;
  • stand alone类型的daemon启动后便常驻内存,而被super daemon管理的daemon只有等到用户请求时才被加载进内存,并且在请求完成后便释放内存资源。由于后者每次请求到来的时候才被加载进内存,因此响应速度比stand alone型daemon要慢。但是它执行完就释放内存资源,因此更节约内存资源。

分类方式二:按照“请求到来时是否能够立即运行”分类

  1. signal-control类型的daemon 这种类型的daemon当有请求到来时便能立即执行。
  2. interval-control类型的daemon 这种类型的daemon会周期性地执行某项工作,因此它没有请求一说,它会周期性地读取配置文件,并执行配置文件中要求的功能。如crond、atd都属于interval-control类型的daemon。

Daemon的启动方式

stand-alone类型的daemon和super daemon类型的daemon有各自的启动方式。

stand alone型Daemon的启动方式

  1. 通过/etc/init.d/xxx启动 启动一个服务是一个繁琐的过程,你需要进行一系列启动前的操作,为了避免这些麻烦,服务提供商把这些繁琐的过程封装在一个shell srcipt中,我们只需执行一个shell script即可启动一个daemon。几乎所有的stand alone型daemon的启动脚本都放在/etc/init.d/下,所以我们只需执行/etc/init.d/xxx start即可启动xxx服务。
  2. 通过service命令启动 若每次启动一个命令都要写/etc/init.d/略微有些麻烦,service命令将其进行了封装,我们只要执行service xxx start/status/restart/stop即可开启/查看/重启/关闭xxx服务。

super daemon型Daemon的启动方式

  1. step1:设置daemon的配置文件 每一个被super daemon管理的daemon都有一个配置文件,在/etc/xinetd.d/目录下。每个daemon的开启或关闭均在该daemon对应的配置文件中设置。
  2. step2:启动super daemon super daemon是一个stand alone型daemon,因此在daemon的配置文件设置好后可通过service xinetd start启动所有由super daemon管理的daemon。

与daemon相关的目录介绍

  • /etc/init.d/ 该目录存放所有stand alone型daemon的初始化脚本。
  • /etc/sysconfig/ 该目录存放所有daemon的初始化配置文件。
  • /etc/xinetd.conf 该文件是super daemon的配置文件。 该文件将会加载/etc/xinetd.d/目录下的所有配置文件。
  • /etc/xinetd.d/ 该目录存放所有被super daemon管理的daemon的配置文件。 daemon启动或关闭就在这些配置文件中配置。
  • /etc/ 该目录存放各daemon各自的配置文件。
  • /var/lib/ 该目录存放各daemon的数据库文件。
  • /var/run/ 该目录记录各daemon的PID。

super daemon的配置

super daemon的配置文件

super daemon的默认配置文件为:/etc/xinetd.conf,它为它所管理的所有daemon做了一些默认的配置。 从最后一行的includedir /etc/xinetd.d可以看出,它加载了它所管理的所有daemon的配置:

defaults
{
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
#
#       enabled         =
#       disabled        =

# Define general logging characteristics.
        log_type        = SYSLOG daemon info
        log_on_failure  = HOST
        log_on_success  = PID HOST DURATION EXIT

# Define access restriction defaults
#
#       no_access       =
#       only_from       =
#       max_load        = 0
        cps             = 50 10
# Address and networking defaults
#
#       bind            =
#       mdns            = yes
        v6only          = no

# setup environmental attributes
#
#       passenv         =
        groups          = yes
        umask           = 002

# Generally, banners are not used. This sets up their global defaults
#
#       banner          =
#       banner_fail     =
#       banner_success  =
}

includedir /etc/xinetd.d

下面来看一下具体的某个daemon的配置:

service rsync #service后为daemon的名字
{
        disable = yes #yes表示关闭此daemon,no表示开启此daemon
        socket_type     = stream#stream表示使用TCP、dgram表示使用UDP、raw表示直接与IP交互
        wait            = no
        user            = root#以什么用户的身份启动这个daemon
        server          = /usr/bin/rsync#这个daemon的启动程序
        server_args     = --daemon#启动时所需的参数
        log_on_failure  += USERID#登录失败时需要记录用户
}
  • =:表示将某个参数设为等号右侧的值,若先前设置中已设置过该参数,则直接覆盖
  • +=:表示保留先前设置的这个参数,再给这个参数增加个值。
  • -和-=的含义同上。

super daemon的防火墙配置

由于受super daemon管理的daemon的请求都首先需要经过super daemon,因此super daemon可以充当防火墙的角色,拒绝一些不安全的请求。 super daemon提供了两种防火墙机制,第一种方式提供较多详细的安全设置,而第二种方式只能阻挡或允许指定的IP,具体见下:

方式一:使用首super daemon管理的daemon的配置文件实现防火墙机制

在某个具体的daemon配置文件中添加如下参数,即可为daemon配置防火墙:

  • instance=数字/UNLIMITED:设置该daemon能够承受的最大连接数。
  • per_source=数字/UNLIMITED:每个IP的最大连接数。
  • Cps=数字1 数字2:该daemon在一秒内的连接数超过数字1,则暂时关闭该daemon数字2的秒数。
  • log_on_success/failure=PID/HOST/USERID/EXIT/DURATION:当登录成功/失败时记录的信息。HOST:连接者的IP、EXIT:离开时间、DURATION:为该用户服务的时间。
  • redirect=IP:将用户的请求转至指定服务器。
  • bind=IP:允许用户用哪个IP访问本服务。
  • only_from=[0.0.0.0,192.168.1.0:24]:只允许指定IP的用户访问。0.0.0.0表示允许所有用户,192.168.1.0:24表示只允许192.168.1.1-192.168.1.255之间的用户访问。
  • access_time=00:00-12:00:只允许该时间段内访问。

方式二:使用xinetd提供的/etc/hosts.allow和/etc/hosts.deny实现防火墙机制

  • /etc/hosts.allow 我们可以在该文件中设置允许访问的IP
  • /etc/hosts.deny 我们可以在该文件中设置不允许访问的IP

设置Daemon开启启动

Linux启动时可以选择有不同的开机等级,不同等级将会开启不同的系统服务。窗口界面的执行等级为level5,命令行的执行等级为level3. 我们可以用chkconfig命令来查看和设置开机启动的服务:

  • 查看chkconfig –list [指定服务的开机启动情况]
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:off   3:off   4:off   5:off   6:off
aegis           0:off   1:off   2:on    3:on    4:on    5:on    6:off
anacron         0:off   1:off   2:off   3:off   4:off   5:off   6:off
atd             0:off   1:off   2:off   3:off   4:off   5:off   6:off

xinetd based services:
    chargen-dgram:  off
    chargen-stream: off
    daytime-dgram:  off
    daytime-stream: off

我们可以看到,所有的服务被分成两块,一块是stand alone型的daemon,一块是被super daemon管理的daemon。我们可以发现,只有stand alone型的daemon才拥有执行等级。

  • chkconfig –level [0123456] [服务名称] [on/off]
chkconfig --level 3 redis on#将redis在level3情况下设为开机自启

设置成功之后可以看到,redis在level3下已经on:

[root@i]# chkconfig --list redis
redis           0:off   1:off   2:off   3:on    4:off   5:off   6:off

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

通过SvcUtil.exe生成客户端代码和配置

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象...

502
来自专栏xcywt

《Linux命令行与shell脚本编程大全》 第八章管理文件系统

ext:最早的文件系统,叫扩展文件系统。使用虚拟目录操作硬件设备,在物理设备上按定长的块来存储数据。

723
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3365
来自专栏魏艾斯博客www.vpsss.net

Windows VPS 服务器一键 phpStudy 安装环境搭建教程

3222
来自专栏大数据学习笔记

CentOS 7.x 安装Sublime Text 3.0正式版

CentOS 7.x 安装Sublime Text 3.0正式版 Sublime Text 3.0 正式版终于发布了! 废话不多说,直接敲命令安装! 1、安装...

2465
来自专栏Java架构师历程

windows下出现mysql启动出现 ‘发生系统错误’ 1067

今天在windows下安装mysql,在启动时出现了发生‘系统错误 1067’的错误。

723
来自专栏小樱的经验随笔

【批处理学习笔记】第十三课:常用dos命令(3)

网络命令 ping 进行网络连接测试、名称解析 ftp 文件传输 net 网络命令集及用户管理 telnet 远程登陆 ipconfig显示、修改TCP/IP设...

2656
来自专栏运维

ELK日志分析系统搭建部署

  日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志...

502
来自专栏用户2442861的专栏

MySQL5.6.21安装版出现the the service mysql56 failed问题的方法。

http://blog.csdn.net/u014677820/article/details/44996905

902
来自专栏北京马哥教育

24条 Docker 建议

在TES GLOBAL,我们已经爱上Docker并从Docker的0.8版本开始就在生产环境中使用它。我们的很多开发者都参加了在DockerCon欧洲上的培训...

3354

扫码关注云+社区