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 条评论
登录 后参与评论

相关文章

来自专栏人人都是极客

Linux下so动态库一些不为人知的秘密

Linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。

24420
来自专栏用户2442861的专栏

recv函数说明返回值

客户端的程序连接上服务器后recv函数阻塞接受,有时会返回0,说明接收超时服务器主动断开了连接,需要重新connect服务器,但重新connect时会报“Tr...

60410
来自专栏SDNLAB

【连载-4】数据中心网络虚拟化 配置管理技术

在构建虚拟网络时,管理员需要进行大量的配置工作,例如端口的ip地址和VXLAN配置等等。显然,没有人愿意在系统每次启动时都将繁琐的配置工作重复一遍,所以将配置信...

28850
来自专栏好好学java的技术栈

并发基础篇(一): 线程介绍

14930
来自专栏Albert陈凯

HTTP、TCP、UDP:通信协议的规则和区别

TCP、HTTP、UDP:都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 TCP HTTP UDP三者的...

32980
来自专栏向治洪

github搭建个人网站

1. 注册账号: 地址: https://github.com/ 输入账号、邮箱、密码,然后点击注册按钮.  ? 2. 初始设置 注册完成后,选...

65880
来自专栏C/C++基础

DOS常用命令大全

2010-04-17 22:27:19|  分类: 电脑技术 |  标签:dos命令大全 |字号大中小 订阅

26310
来自专栏pangguoming

创建GitHub技术博客全攻略

说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字. 1. 注册账号: 地址:...

42470
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第七天 HTTP&Tomcat学习

HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。用于定义WEB浏览器与WE...

20450
来自专栏happyJared

Java开发人员常用的服务配置(Nginx、Tomcat、JVM、Mysql、Redis)

48510

扫码关注云+社区

领取腾讯云代金券