systemd:
    Systemd 是系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
    特性:
        系统引导时实现服务并行启动,实现快速开机。
        按需启动守护进程。
        能自动保存系统状态快照。
        基于依赖关系定义服务控制逻辑(自动化的服务依赖关系管理)。
        同时采用 socket 式与 D-Bus 总线式激活服务。

    unit:
        表示不同类型的 systemd 对象,unit 由其相关的配置文件进行标识,识别和配置。
        相关文件中主要包含了系统服务,监听的 socket,保存的快照以及其他与 init 相关的信息。
        这些配置文件主要保存在
          /usr/lib/systemd/system  每个服务最主要的启动脚本设置,类似于之前的 /etc/init.d/。
          /run/systemd/system      系统执行过程中所产生的服务脚本,比上面目录优先运行。
          /etc/systemd/system      管理员建立的执行脚本,类似于 /etc/rc.d/rcN.d/Sxx 类的功能,比上面目录优先运行。

        这三个目录的配置文件优先级从低到高,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。

        系统安装时,默认会将 unit 文件放在 /usr/lib/systemd/system 目录。

    修改系统默认的配置:
        如果我们想要修改系统默认的配置,比如 sshd.service,一般有两种方法
        1. 在 /etc/systemd/system 目录下创建 sshd.service 文件,里面写上我们自己的配置。
        2. 在 /etc/systemd/system 下面创建 sshd.service 目录,在目录里新建任何以 .conf 结尾的文件,然后写入自己的配置。推荐这种做法。

    xx.service:
        每一个服务以 .service 结尾,一般会分为3部分:[Unit]、[Service] 和 [Install]。
        [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:启动前要做什么,比如测试一下配置文件是否正常;
        ExecStart:  启动;
        ExecReload: 重载;
        ExecStop:   停止;
        PrivateTmp: True 表示给服务分配独立的临时空间;
        Environment:指定环境变量,如果不指定,想让它默认区使用系统环境变量会出错。格式:Environment='key1=val1' 'key2=val2'
        User:   指定用哪个用户
        Group:  指定用哪个组

        [Install]
        WantedBy:
            服务安装的用户模式,从字面上看,就是想要使用这个服务的是谁? multi-user.target,就是指想要使用这个服务的目录是多用户。
            每一个 .target 实际上是链接到我们单位文件的集合,当我们执行 systemctl enable sshd.service 时,
            就会在 /etc/systemd/system/multi-user.target.wants/ 目录下新建一个 /usr/lib/systemd/system/sshd.service 文件的符号链接。


脚本加入开机启动:
    - 创建脚本 demo.sh
      "
      #! /bin/bash
      service firewalld start
      "
    - cd /etc/systemd/system
    - 创建 demo.service
      "
      [Unit]
      Description=demo
      After=network.target

      [Service]
      User=root
      Group=root
      Type=forking

      ExecStart=/home/demo.sh
      # ExecStop=/home/kill-demo.sh
      # ExecReload=/bin/kill -s HUP $MAINPID
      PrivateTmp=true

      [Install]
      WantedBy=multi-user.target
      "
    - 加入开机启动 systemctl enable demo