服务基础之服务简单介绍(systemd)

文章目录

    • 一、服务
      • 1.服务
        • 1.1 服务工作过程
        • 1.2 常见的tcp/ip协议
        • 1.3 Linux服务分类
          • 1.3.1 独立守护进程
          • 1.3.2 超级守护进程
      • 2.管理服务
        • 2.1 Systemd
          • 2.1.1 systemd概述
          • 2.1.2 简单说明
          • 2.1.3 单元文件
          • 2.1.4 systecmctl脚本
          • 2.1.5 配置文件目录
          • 2.1.6 修改系统中服务管理相关的默认配置如nginx.service的方法
          • 2.1.7 服务配置文件解读
          • 2.1.8 系统管理相关命令
          • 2.1.9 systemd相关操作
          • 2.1.10 systemd初始化流程
        • 2.2 (centos6)chkconfig
        • 2.3 (centos7)systemctl
        • 2.4 无服务控制脚本

一、服务

 

1.服务

服务是向外提供服务的进程,一般来说都会放在后台,不应该和终端关联

 

1.1 服务工作过程

 

  • 提供服务的一端叫服务端,服务启动时需要监听对应的端口号
  • 请求服务的一端叫客户端,客户端指定服务端的IP地址加端口号向服务端发起请求
  • 服务端收到客户端的请求后分析数据包发现请求的端口是XX端口,内核根据哪个进程监听此端口将数据包发给对应的进程处理。处理完后将数据返回给客户端

 

1.2 常见的tcp/ip协议

  • 软件用户接口分类
    • CLI(命令行界面)
    • GUI(图形用户界面)
  • ftp 文件传输协议
    • tcp 20,21
  • ssh
    • tcp 22
  • telnet
    • tcp 23
  • smtp
    • tcp 25
  • dns
    • tcp/udp 53
  • dhcp
    • udp 67,68
  • http
    • tcp 80
  • mysql
    • tcp 3306
  • https
    • tcp 443
  • redis
    • tcp 6379

 

1.3 Linux服务分类

 

1.3.1 独立守护进程
  • 独立守护进程是自行监听在后台的,基本所有服务都是独立守护类进程的服务
  • centos6上,独立守护进程的管理脚本都是sys V风格,放置在/etc/rc.d/init.d目录

 

1.3.2 超级守护进程
  • 超级守护进程专指xinetd,xinetd本身是一个常驻内存的独立守护进程,它要监听来自外界对其管理的服务的请求。
  • xinetd进程管理服务
    • 临时守护进程(telnet,rsync等)受两个配置文件的控制,一个是/etc/xinetd.conf提供的默认配置,一个是/etc/xinetd.d下针对某个服务的配置
    • 临时守护进程的配置/etc/xinetd.d/rsync
       
service rsync
	{
	disable = no
		yes不启动,no启用
	flags= IPv6
	socket_type = stream
		tcp类型套接字
	wait = no
		单线程还是多线程,no多线程
	user = root
		服务进程执行者
	server = /usr/bin/rsync
		服务进程路径
	server_args = --daemon
		服务进程运行时参数
	log_on_failure += USERID
		连接失败记录日志,并添加USERID
	bind = ip_addr
		监听地址
	interface = ip_addr
		同bind
	}

 

2.管理服务

 

2.1 Systemd

 

2.1.1 systemd概述

systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。

systemd是一个专用于 Linux 操作系统的系统与服务管理器。当作为启动进程(PID=1)运行时,它将作为初始化系统运行,也就是启动并维护各种用户空间的服务。

为了与传统的 SysV 兼容,如果将 systemd 以 init 名称启动,并且"PID≠1",那么它将执行 telinit 命令并将所有命令行参数原封不动的传递过去。 这样对于普通的登录会话来说,无论是调用 init 还是调用 telinit 都是等价的。

当作为系统实例运行时,systemd将会按照system.conf配置文件以及system.conf.d配置目录中的指令工作;当作为用户实例运行时,systemd 将会按照user.conf配置文件 以及 user.conf.d配置目录中的指令工作。

systemd将各种系统启动和运行相关的对象,表示为各种不同类型的单元(unit),并提供了处理不同单元之间依赖关系的能力。大部分单元都静态的定义在单元文件中,但是有少部分单元则是动态自动生成的:其中一部分来自于其他传统的配置文件(为了兼容性),而另一部分则动态的来自于系统状态或可编程的运行时状态。单元既可以处于活动(active)状态,也可以处于停止(inactive)状态,当然也可以处于启动中(activating)或停止中(deactivating)的状态。还有一个特殊的失败(failed)状态,意思是单元以某种方式失败了(进程崩溃了、或者触碰启动频率限制、或者退出时返回了错误代码、或者遇到了操作超时之类的故障)。当进入失败(failed)状态时,导致故障的原因将被记录到日志中以方便日后排查。需要注意的是,不同的单元可能还会有各自不同的"子状态",但它们都被映射到上述五种状态之一。

systemd的优点是功能强大、使用方便,缺点是体系庞大、非常复杂。事实上,现在还有很多人反对使用systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix哲学。
 

2.1.2 简单说明
  • systemd成为新的系统管理器,其最大的优点就是支持进服务并行启动,从而使效率大大提高;
  • 同时它还具有日志管理、快照备份与恢复、挂载点管理等多种实用功能,
  • 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率;
  • 但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多;

 

2.1.3 单元文件

单元配置文件包含有关以下项目的信息:服务、套接字、设备、安装点、自动安装点、交换文件或分区、启动目标、监控的文件系统路径、受 systemd 控制和监管的计时器、临时系统状态快照、资源管理部分或一组外部创建的进程

  • 服务

    进程相关信息(例如运行守护程序);文件以 .service 结尾

  • 目标

    用于将单元分组以及在启动期间用作同步点;文件以 .target 结尾

  • 套接字

    IPC 或网络套接字或文件系统 FIFO 相关信息,适用于基于套接字的激活(如 inetd);文件以 .socket 结尾

  • 路径

    用于触发其他单元(例如,在文件更改时运行服务);文件以 .path 结尾

  • 计时器

    受控制计时器相关信息,适用于基于计时器的激活;文件以 .timer 结尾

  • 装入点

    通常由 fstab 生成器自动生成;文件以 .mount 结尾

  • 自动安装点

    文件系统自动安装点相关信息;文件以 .automount 结尾

  • 交换

    内存分页的交换设备或文件相关信息;文件以 .swap 结尾

  • 设备

    sysfs/udev(7) 设备树中公开的设备相关信息;文件以 .device 结尾

  • 范围/部分

    有关分层管理一组进程的资源的概念;文件以 .scope/.slice 结尾

/usr/lib/systemd/system目录下查看

 
 

2.1.4 systecmctl脚本
  • /usr/lib/systemd/system

  • /usr/lib/systemd/user

 

2.1.5 配置文件目录

这三个目录是有优先级的,lib–>run–>etc,lib下的目录优先级最低,etc下的目录优先级最高;
当同一个内容出现在三个目录下时,优先级高的目录会覆盖优先级底的目录;
系统安装时,默认会将unit文件存放在/lib/systemd/system目录下;
/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录;
/run/systemd/system目录一般很少修改,除非是修改程序运行时的一些参数即Session级别的,才在该目录下做修改;

  • /lib/systemd/system
  • /run/systemd/system
  • /etc/systemd/system

 

2.1.6 修改系统中服务管理相关的默认配置如nginx.service的方法
  • 在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置;
  • 在/etc/systemd/system下面创建nginx.service.d目录;在创建的目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置,推荐这种做法;

 

2.1.7 服务配置文件解读
[root@Master system]# cat nginx.service 
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx 
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

  • 配置文件分为三部分,

    • [Unit]

      Description:服务的简单描述

      Documentation:服务文档

      After=:依赖,仅当依赖的服务启动之后再启动自定义的服务单元

    • [Service]

      Type : 启动类型simple、forking、oneshot、notify、dbus

      • Type=simple(默认值):systemd认为该服务将立即启动,服务进程不会fork;如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型;
      • Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功;对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可;使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程;
      • Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务;可能需要同时设置 RemainAfterExit=yes使得systemd在服务进程退出之后仍然认为服务处于激活状态;
      • Type=notify:与Type=simple相同,但约定服务会在就绪后向systemd发送一个信号,这一通知的实现由libsystemd-daemon.so提供;
      • Type=dbus:若以此方式启动,当指定的BusName出现在DBus系统总线上时,systemd认为服务就绪;

      PIDFile:pid文件路径

      ExecStartPre:启动前要做什么,上文中是测试配置文件-t

      ExecStart:启动

      ExecReload:重载

      ExecStop:停止

      PrivateTmp:True表示给服务分配独立的临时空间

    • [Install]

      WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁;

      • 上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户;
      • 每一个.target实际上是链接到我们单位文件的集合,当我们执行:

      systemctl enable nginx.service

      • 就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/nginx.service文件的链接;
      • 当执行该命令后,nginx服务会随着开机而启动;

      systemctl disable nginx.service

      • Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service.
      • 该命令执行完成后会将/etc/systemd/system/multi-user.target.wants目录下的关于nginx.service的软连接取消;

 

2.1.8 系统管理相关命令
  • systemctl是systemd的主命令,用于管理系统和服务

    systemctl reboot

    systemctl poweroff

    systemctl halt

    systemctl rescue

  • systemd-analyze命令用于查看启动耗时

    systemd-analyze 查看系统启动耗时

    systemd-analyze blame 查看每个服务的启动耗时

    systemd-analyze critical-chain 显示瀑布状的系统启动过程流

 

2.1.9 systemd相关操作
  • 自启动 systemctl enable nginx.service
  • 禁止自启动 systemctl disable nginx.service
  • 启动服务 systemctl start nginx.service
  • 停止服务 systemctl stop nginx.service
  • 重启服务 systemctl restart nginx.service
  • 查看Unit定义文件 systemctl cat nginx.service
  • 编辑Unit定义文件 systemctl edit nginx.service
  • 重新加载Unit定义文件 systemctl reload nginx.service
  • 列出已启动的所有unit,就是已经被加载到内存中 systemctl list-units
  • 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unit systemctl list-unit-files
  • 查看服务的日志 journalctl -u nginx.service 还可以配合-b一起使用,只查看自本次系统启动以来的日志
  • 查看所有target下的unit systemctl list-unit-files --type=target
  • 查看默认target,即默认的运行级别。对应于旧的runlevel命令 systemctl get-default
  • 设置默认的target systemctl set-default multi-user.target
  • 查看某一target下的unit systemctl list-dependencies multi-user.target
  • 切换target,不属于新target的unit都会被停止 systemctl isolate multi-user.target
  • systemctl poweroff >>>关机
  • systemctl reboot >>>重启
  • systemctl rescue >>>进入rescue模式

 

2.1.10 systemd初始化流程
  • systemctl start|stop|status|restart sshd.service
  • systemctl enable sshd.service
  • systemctl disable sshd.service

 

2.2 (centos6)chkconfig

需要init.d目录下有LSB风格的服务控制脚本

chkconfig --list #查看服务在不同运行级别是否开机启动

chkconfig SERVICE_NAME on|off #默认修改2,3,4,5

管理当前服务

1.通过服务控制脚本 /etc/init.d/NAME start|stop|restart|reload|status

2.通过service命令 service NAME start|stop…
 

2.3 (centos7)systemctl

systemctl start|stop|status|restart sshd.service 启动,关闭,状态,重启服务

systemctl enable sshd.service 开机启动

systemctl disable sshd.service 开机不启动

 

2.4 无服务控制脚本

把服务进程放入rc.local使其开机自动运行

/usr/local/nginx/sbin/nginx

你可能感兴趣的:(#,Linux之服务基础)