• systemd 服务脚本编写与管理


    目录

    ​1、认识service的unit文件

    2、systemd 使用语法

    3、service unit文件的例子

    案例:

    1.源码编译安装nginx 实现systemd管理控制

    2. 二进制安装tomcat 实现systemd管理控制

            在不同的Linux版本中,管理服务的方式不尽相同,主要分界限在RHEL/CentOS6版本,也就是说,在CentOS6 以及之前版本中,写服务脚本,需要放在/etc/init.d/目录下,这些脚本都是bash脚本,且脚本编写较复杂。而 在CentOS7/RHEL7以及以后版本中,采用了一种叫unit的配置文件来管理服务,写服务脚本只需要按照标准格 式编写即可。

            通过systemd命令集可以方便的对这些Unit进行管理。 systemd是Linux上系统守护进程管理工具,字母d(daemon)是守护进程的缩写,所以,systemd的意思就是 守护整个系统。systemd可以管理Linux系统中的所有资源,不同的资源统称为Unit,常见的unit有:

    1. Service unit:文件扩展名为.Service,用于定义系统服务(常用)
    2. Target unit:文件名扩展为.target,用于模拟实现“运行级别”
    3. Mount unit:文件名扩展为.mount定义文件系统挂载点。

    Systemd是内核启动后的第一个用户进程,PID为1,是所有其它用户进程的父进程。

    1、认识service的unit文件

    扩展名:.service

    service 文件存放路径:

    • /etc/systemd/system/* —— 系统管理员手动软件安装包或脚本放置于此,优先级最高
    • /run/systemd/system/* —— 运行时配置文件,这个目录一般是进程在运行时动态创建unit文件的目录, 一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。
    • /usr/lib/systemd/system/* —— 该目录中包含的是软件包安装的单元,也就是说通过yum、dnf、rpm等软件包管理命令管理的systemd单元文件,都放置在该目录下。
    • /lib/systemd/system:指向/usr/lib/systemd/system。

    Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件是(自动生成)存放在这个目录。

    2、systemd 使用语法

    systemctl [command] [unit](配置的应用名称)

    command可选项:

    • start:启动指定的unit         systemctl start nginx
    • stop:关闭指定的unit         systemctl stop nginx
    • restart:重启指定unit         systemctl restart nginx
    • reload:重载指定unit         systemctl reload nginx
    • enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置         systemctl enable nginx
    • disable:开机时不自动运行指定unit         systemctl disable nginx
    • status:查看指定unit当前运行状态         systemctl status nginx 

    3、service unit文件的例子

    下面 /usr/lib/systemd/system/postfix.service 文件,它描述的是postfix服务的管理方式:

    1. [Unit]
    2. Description=Postfix Mail Transport Agent
    3. After=syslog.target network.target
    4. [Service]
    5. Type=forking
    6. PIDFile=/var/spool/postfix/pid/master.pid
    7. EnvironmentFile=-/etc/sysconfig/network
    8. ExecStartPre=-/usr/libexec/postfix/aliasesdb
    9. ExecStartPre=-/usr/libexec/postfix/chroot-update
    10. ExecStart=/usr/sbin/postfix start
    11. ExecReload=/usr/sbin/postfix reload
    12. ExecStop=/usr/sbin/postfix stop
    13. [Install]
    14. WantedBy=multi-user.target

    整个文件分三个部分,[Unit]·[Service]·[lnstal]

    1. [Unit]:记录unit文件的通用信息。
    2. [Service]:记录Service的信息
    3. [lnstall]:安装信息。

    (1)、[Unit]部分

    Description:对本service的描述

    Before/After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxox.service,代表本服务在 xxx之后启动。

    (2)、[Service]部分

    Type :service的种类,包含下列几种类型:

    • simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出,那么一切都退出
    • forking:标准的启动方式。服务包含父进程和子进程,启动程序后,会调用fork()函数,通过父进程生成子进程。
    • oneshot:这种服务类型就是启动完成,进程就没了。属于一次性启动。
    • notify:跟simple类似,但是notify会在当前服务启动完毕,发送一个信号通知Systemd。

    EnvironmentFile:环境配置文件

    PIDFile:指向当前服务PID file的绝对路径

    ExecStartPre:ExecStart执行前所调用的命令。

    ExecStartPost:ExecStart执行后所调用的命令。

    ExecStart:服务启动时执行的命令,此命令就是服务的主体

    ExecStop:定义停止当前服务时执行的命令。

    注意:启动、重启、停止命令全部要求使用绝对路径

    (3)、[Install]部分

    WantedBy:在何种情况下,服务都可以被启用。

    例如:WantedBy=multi-user.target(多用户环境下启用)

    案例:

    1.源码编译安装nginx 实现systemd管理控制

    1. #1. 安装nginx编译环境
    2. yum -y install gcc gcc-c++ openssl-devel pcre-devel gd-devel iproute net-tools telnet wget curl
    3. wget http://nginx.org/download/nginx-1.15.5.tar.gz
    4. tar zxf nginx-1.15.5.tar.gz &&
    5. cd nginx-1.15.5
    6. ./configure --prefix=/usr/local/nginx \
    7. --with-http_ssl_module \
    8. --with-http_stub_status_module
    9. make -j 4 && make install
    10. #2. 通用方式启动nginx
    11. /usr/local/nginx/sbin/nginx #启动
    12. /usr/local/nginx/sbin/nginx -s reload #重启
    13. /usr/local/nginx/sbin/nginx -s quit #关闭nginx
    14. #3. systemd 管理控制启动模式
    15. vim /usr/lib/systemd/system/nginx.service
    16. [Unit]
    17. Description=nginx
    18. After=network.target
    19. [Service]
    20. Type=forking
    21. ExecStart=/usr/local/nginx/sbin/nginx
    22. ExecReload=/usr/local/nginx/sbin/nginx -s reload
    23. ExecStop=/usr/local/nginx/sbin/nginx -s quit
    24. PrivateTmp=true
    25. [Install]
    26. WantedBy=multi-user.target
    27. #4. 参数详解
    28. systemctl restart nginx
    29. systemctl enable nginx
    30. systemctl stop nginx

    2. 二进制安装tomcat 实现systemd管理控制

    JDK 下载官网

    1. #1. 下载Tomcat
    2. wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.82/bin/apache-tomcat-8.5.82.tar.gz
    3. #2. rpm直接安装jdk
    4. rpm -ivh jdk-8u231-linux-x64.rpm
    5. #3. 配置环境变量
    6. vim /etc/profile
    7. export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
    8. export JRE_HOME=${JAVA_HOME}/jre
    9. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    10. export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    11. export PATH=${JAVA_HOME}/bin:$PATH
    12. source /etc/profile
    13. #4. 检测环境
    14. java -version
    15. #5. 安装tomcat
    16. tar -xf apache-tomcat-8.5.82.tar.gz
    17. mv apache-tomcat-8.5.82 /usr/local/tomcat
    18. #6. 启动tomcat
    19. sh /usr/local/tomcat/bin/startup.sh #启动
    20. sh /usr/local/tomcat/bin/shutdown.sh #关闭
    21. #7. systemd管理控制启动
    22. vim /usr/lib/systemd/system/tomcat.service
    23. [Unit]
    24. Description=tomcat server
    25. Wants=network-online.target
    26. After=network.target
    27. [Service]
    28. Type=forking
    29. Environment="JAVA_HOME=/usr/java/jdk1.8.0_231-amd64"
    30. Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
    31. Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
    32. ExecStart=/usr/local/tomcat/bin/startup.sh
    33. ExecStop=/usr/local/tomcat/bin/shutdown.sh
    34. Restart=on-failure
    35. [Install]
    36. WantedBy=multi-user.target
    37. #8. systemd 管理
    38. systemctl restart tomcat #启动
    39. systemctl enable tomcat #配置自启
    40. systemctl stop tomcat #停止服务
    41. systemctl status tomcat #检测状态
  • 相关阅读:
    利用Jmeter做接口测试(功能测试)全流程分析
    猿创征文|【Typescript入门】常用数据类型(1)
    Flow公链 | 通往无需许可的部署之路
    搭建单机测试SequoiaDB
    安装SQL Server详细教程
    动视密码重置一直提示密码不足8位
    新零售SaaS架构:订单履约系统的应用架构
    业务可视化-让你的流程图“Run“起来(4.实际业务场景测试)
    App逆向之frida-dexdump脱壳分析某肿瘤sign
    码蹄杯语言基础:选择结构(C语言)
  • 原文地址:https://blog.csdn.net/weixin_46560589/article/details/126903039