• 别人的Linux私房菜(18)认识系统服务(daemon)


    完成服务service的程序称为daemon。完成计划性的服务程序如crond是一个daemon。

    早期的System V的init管理daemon操作中,系统内核首先调用init,然后init运行系统服务。

    所有的服务脚本放置在/etc/init.d目录下。启动、关闭、重启、状态的命令为:/etc/init.d/daemon start/stop/restart/status

    init的服务分为:独立启动模式服务,常驻于内存中。超级守护进程:由特殊的xinetd,inetd两个总管进程提供socket对应或端口管理,唤醒相关的服务。

    init不能协助唤醒依赖服务。

    init可以根据自定义运行级别唤醒不同的服务。Linux提供了7个运行级别0-6.1单人维护模式,3纯命令行模式,5图形界面。命令级别的切换,如init 5.

    init各个运行级别通过/etc/rc.d/rc[0-6]/SXXdaemon链接到/etc/init.d/daemon。链接名为SXXdaemon。XX为数字,依序数字执行,解决依赖性问题。

    通过命令确认链接关系,默认启动,不启动,查看启动与否:chkconfig daemon on,chkconfig daemon off,chkconfig --list daemon

    systemd并行处理所有服务,加速开机流程,常驻内存,响应就立即处理后续的daemon任务。使用一个systemctl命令。

    拥有服务依赖性检查,定义所有的服务为一个服务单位unit,并归于服务类型type(service、socket、target、path、snapshot、timer)

    systemd将一类功能集合为一个target,包含多个daemon。

    systemd兼容init,init的旧脚本可以通过systemd管理,但在运行级别上没有完全对应(只135部分对应),systemctl不可自定义参数。

    管理员手动执行的启动无法被systemd检查和管理。systemd无法通过标准输入输出传递信息。

    systemd的配置文件存放目录为和daemon有关:

    /etc/lib/systemd/system/:每个服务最主要的启动脚本设置。

    /run/systemd/system/:系统执行过程中产生的服务脚本。优先级高。

    /etc/systemd/system/:管理员根据主机需求所建立的执行脚本,大多是链接文件,链接到/etc/lib/systemd/system/。优先级更高。

    /etc/sysconfig/*:初始化选项写入该目录,如网络设置

    /var/lib/:一些会产生数据的服务会写入该目录,如数据库管理

    /run/存放daemon的缓存,包括lock和PID文件。

    type类型介绍:type以后缀名表示每种服务的类型

    service一般服务类型,系统服务中的本地和网络服务。socket,内部程序数据交换服务,传输信息socket文件功能。

    target执行环境类型,是unit的合集。mount,automount文件系统挂载相关的服务,path,检测特定文件或目录,如打印服务

    timer循环执行的服务,比anacrontab更有弹性。

    查看服务状态:如查看atd服务的状态:systemctl status atd.service

    状态栏的Active,是active(running)表示正在运行,(exited)表示正常执行一次结束,如挂载,

    (waitting)表示正在运行中,等待其它事件发生后继续,如打印。inactive表示未运行。

    状态栏的Loaded,是enable表示开机被运行,disable开机不会被运行。

    static这个daemon不会自启,可以被其它服务唤醒(如socket,path)。mask无论如何不会被启动。

    关闭服务:systemctl stop atd.service(使用kill关闭的服务不建议是正常的服务)

    开启服务:systemctl start atd.service

    强制服务注销:systemctl mask cups.service

    取消注销:systemctl umask cups.service

    列出系统上所有启动的unit:systemctl(LOAD开机是否加载,ACTIVE和SUB组合,指代状态栏)

    列出所有已经安装的unit:systemctl list-unit-files(根据/usr/lib/systemd/system)

    根据unit显示目前启动的unit:systemctl list-units(加上--all显示没有启动的部分)

    查询只剩下service的项目:systemctl list-units --type=service --all

    查询只剩下target的项目:systemctl list-units --type=target --all

     其中的graphical.target加上了图形界面,multi-user.target纯命令行模式,rescue.target额外临时系统

    emergency.target紧急处理系统的错误。shutdown.target关机模式,getty,target和设置几个tty有关。

    查询目前操作界面模式:systemctl get-default

    设置默认模式为纯命令行模式:systemctl set-default multi-user.targe

    关闭图形界面改为纯命令行模式:systemctl isolate multi-user.target(isolate隔离不同的模式)

    systemctl的其他命令:poweroff关机 reboot重新开机 suspend挂起,状态保存内存 hibernate休眠,状态保存磁盘中

    rescue进入恢复模式  emergency进入紧急恢复模式

    查询默认操作界面模式的依赖性:systemctl list-dependencies

    查询被依赖性:systemctl list-dependencies --reverse

    查询图形界面的被依赖性:systemctl list-dependencies graphical.target

    查询监听本地需求的socket文件位置:systemctl list-sockets

    /etc/services将服务和端口对应(不建议修改,可能导致协议出错)

    systemd将很多不被列为daemon的进程纳入到了systemd的管辖检测范围内,产生一个网络端口。

    查看打开的网络端口:netstat -tlunp

    然后可以查询到对应端口的程序名称,通过systemctl list-units -all | grep xxx查找到该文件对应的服务,

    关闭该服务,相对应的端口也关闭,

    额外修改服务建议放置的位置:

    /etc/lib/systemd/system/:官方发布的默认配置文件,官方不建议修改。(可以改)

    /run/systemd/system/xxx.service.d/*:配置相同的文件名和拓展名,然后加d目录,在该目录下的配置文件最好以.conf后缀。这样会累加到官方配置文件。

    /etc/systemd/system/xxx.service.wants/*:启动该服务之后建议启动的服务写入

    /etc/systemd/system/xxx.service.wants/*:启动该服务之前需要启动的服务依赖项。

    cat /usr/lib/systemd/system/sshd.service#查看配置文件

    配置文件中的Unit部分为unit说明,

    Service部分规范服务启动的脚本,环境配置文件名,启动方式等

    Install项目将此unit安装到的位置。

    #和;代表注释。设置可以重复设置但是会覆盖。

    配置文件的一些说明如下:

     管理tty1-6的功能命令由agetty完成。终端的功能实现由getty.target完成,产生tty1-6则是getty@.service提供。

    显示getty.target的默认设置值,:systemctl show getty.target

    在After选项后,启动了@tty1-6服务。若有相同名称的服务则执行,没有则将@后面的内容替换带入getty@.service中的%I替换执行。

    由此简化了多个要执行的启动设置。

     tty的数量由/etc/systemd/logind,conf里面进行了规范,NAutoVTs确定。

    启动tty8:systemctl restart systemd-login.service

    自定义的ftp服务启动:systemctl start vsftpd@vsftpd3.service

     systemctl daemon-reload

     systemd中的timer服务产生的信息记录到log中,比crond在debug上方便,可以和systemd结合,

    也可和control group结合替换/etc/secure/limit.conf限制该任务的资源利用

    没有email通知功能,没有随机取样功能。需要timer.target启动,需要sname.service服务存在,需要sname.timer时间服务存在。

    在/etc/systemd/system下建立*.timer文件,其中的内容说明如下:

    使用OnCalendar的时间格式或口语如下:

     

     

     建立脚本:

    1 vim /etc/systemd/system/backup.timer
    2 [Unit]
    3 Description=backup my server timer
    4 [Timer]
    5 OnBootSec=2hrs
    6 OnUnitActiveSec=2days
    7 [Install]
    8 WantedBy=multi-user.target
    View Code

    启动,显示执行,状态情况,:

    1 [root@study ~]# systemctl daemon-reload
    2 [root@study ~]# systemctl enable backup.timer
    3 [root@study ~]# systemctl restart backup.timer
    4 [root@study ~]# systemctl list-unit-files | grep backup
    5 [root@study ~]# systemctl show timers.target
    6 [root@study ~]# systemctl show backup.service
    7 [root@study ~]# systemctl show backup.timer
    View Code

     CentOS7然后是默认服务概要,

     后面的用到看文档吧。大致就是这样。

  • 相关阅读:
    对面向对象设计原则的总结
    sql server连接字符串
    js页面加载进度条
    Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS
    asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例(一)_转
    asp.net删除目录,Session丢失
    extjs ComboBox使用注意
    转:使Eclipse的智能感知可以像 Visual Studio 一样快速提示
    Android ContentProvider 填删改查 实例
    Windows Phone StackPanel 布局示例
  • 原文地址:https://www.cnblogs.com/bai2018/p/10771712.html
Copyright © 2020-2023  润新知