<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="在Linux系统中将自己部署的服务注册为系统服务">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2024-09-29 15:03<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
在Linux系统中将自己部署的服务注册为系统服务


一、概述


systemctl是一个系统软件服务的管理工具，可以用于启动、停止、重启和重新加载服务，查看服务状态以及设置默认启动级别等。它还可以管理服务之间的依赖关系，定制服务配置，并对服务的日志进行管理，在Linux中，定义软件服务的文件通常是systemd服务单元文件，具有.service后缀，这些文件通常位于以下目录：




XML/HTML代码


    /etc/systemd/system/

    /usr/lib/systemd/system

    /lib/systemd/system







二、service文件


1、格式说明


service文件通常由三部分组成：




XML/HTML代码


    [Unit]：定义与Unit类型无关的通用选项，用于提供unit的描述信息、unit行为及依赖关系等

    [Service]：与特定类型相关的专用选项，此处为Service类型

    [Install]：定义由&ldquo;systemctl enable&rdquo;以及&quot;systemctl disable&ldquo;命令在实现服务启用或禁用时用到的一些选项







注：以#开头的行后面的内容会被认为是注释


1、yes、on、true代表开启，0、no、off、false代表关闭


时间单位默认是秒，可以用毫秒（ms）分钟（m）等须显式说明


2、可选项说明


Unit部分




XML/HTML代码


    Description:    对当前服务的简单描述

    After:    可以指定在哪些服务之后进行启动

    Before:    可以指定在哪些服务之前进行启动

    Requires:    可以指定服务依赖于哪些服务(这种依赖是&quot;强依赖&quot;，一旦所依赖的服务异常，当前的服务也随之停止)

    Wants:    可以指定服务依赖于哪些服务(这种依赖是&quot;弱依赖&quot;，即使所依赖的服务的启动情况不影响当前的服务是否启动)

    Conflicts:    定义units间的冲突关系







Service部分




XML/HTML代码


    EnvironmentFile： 环境配置文件，用来指定当前服务启动的环境变量

    ExecStart： 指定服务启动时执行的命令或脚本

    ExecStartPre： 指定服务启动前执行的命令或脚本

    ExecStartPost:    指定服务启动后执行的命令或脚本

    ExecStop:    指明停止服务要运行的命令或脚本

    ExecStopPost:    指定服务停止之后执行的命令或脚本

    RestartSec:    指定服务在重启时等待的时间，单位为秒

    ExecReload:    指明重启服务要运行的命令或脚本

    Restart:    当设定Restart=1 时，则当次daemon服务意外终止后，会再次自动启动此服务，具体看下列类型

    PrivateTmp:    设定为yes时，会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

    KillMode:    指定停止的方式，具体见下面

    Restart:    指定重启时的类型，具体见下面

    Type:    指定启动类型，具体见下面







type的可选值




XML/HTML代码


    simple  指定ExecStart字段的进程为主进程

    forking  指定以fork() 子进程执行ExecStart字段的进程

    oneshot  执行一次

    notify  启动后发送会发送通知信号通知systemd

    idle  等其他任务结束后才运行







Restart的可选值




XML/HTML代码


    no:    退出后不会重启

    on-success:    当进程正常退出时(退出码为0) 执行重启

    on-failure:    当进程不正常退出时(退出码不为0) 执行重启

    on-abnormal:   当被信号终止和超时执行重启

    on-abort:      当收到没有捕捉到的信号终止时执行重启

    on-watchdog:   当看门狗超时时执行重启

    always:        一直重启







KillMode可选值




XML/HTML代码


    control-group：   杀掉当前进程中所有的进程

    process：      杀掉当前进程的主进程

    mixed:    主进程将收到 SIGTERM 信号，子进程收到 SIGKILL 信号

    none:    不杀掉任何进程







Install部分




XML/HTML代码


    Alias：    别名，可使用systemctl command Alias.service

    RequiredBy：   被哪些units所依赖，强依赖

    WantedBy：   被哪些units所依赖，弱依赖

    Also：   安装本服务的时候还要安装别的相关服务

    Install：  一般填为WantedBy=multi-user.target







三、service文件样例


将自己部署的nginx注册为系统服务




XML/HTML代码


    [Unit]  

    Description=The nginx web and reverse proxy server

    Documentation=https://nginx.org/en/docs/

    After=network-online.target remote-fs.target nss-lookup.target

    Wants=network-online.target

     

    [Service]

    Type=forking

    #启动检测命令

    ExecStartPre=/usr/local/nginx/sbin/nginx -t

    #启动命令

    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    #重载配置文件命令

    ExecReload=/usr/local/nginx/sbin/nginx -s reload

    #停止命令

    ExecStop=/usr/local/nginx/sbin/nginx -s quit

     

    [Install]

    WantedBy=multi-user.target







将自己部署的mysql注册为系统服务




XML/HTML代码


    [Unit]  

    Description=Mysql

    After=syslog.target network.target remote-fs.target nss-lookup.target

     

    [Service]

    Type=forking

    #指定PID文件

    PIDFile=/usr/local/mysql/data/centos-linux.shared.pid

    #启动MySQL

    ExecStart=/usr/local/mysql/support-files/mysql.server start

    #重载

    ExecReload=/bin/kill -s HUP $MAINPID

    #停止服务

    ExecStop=/usr/local/mysql/support-files/mysql.server stop

    PrivateTmp=false

     

    [Install]

    WantedBy=multi-user.target







四、systemctl命令合集




XML/HTML代码


    #语法

    systemctl COMMAND name.service

    #启动

    systemctl start name.service

    #停止

    systemctl stop name.service

    #重启

    systemctl restart name.service

    #查看状态

    systemctl status name.service

    #禁止自动和手动启动

    systemctl mask name.service

    #取消禁止

    systemctl unmask name.service

    #查看某服务当前激活与否的状态

    systemctl is-active name.service

    #查看所有已经激活的服务

    systemctl list-units --type|-t service

    #查看所有服务

    systemctl list-units --type service --all

    #设定某服务开机自启，相当于chkconfig name on

    systemctl enable name.service

    #设定某服务开机禁止启动：相当于chkconfig name off

    systemctl disable name.service

    #查看所有服务的开机自启状态，相当于chkconfig --list

    systemctl list-unit-files --type service

    #用来列出该服务在哪些运行级别下启用和禁用：chkconfig &ndash;list name

    ls /etc/systemd/system/*.wants/name.service

    #查看服务是否开机自启

    systemctl is-enabled name.service

    #列出失败的服务

    systemctl --failed --type=service

    #开机并立即启动或停止

    systemctl enable --now postfix

    systemctl disable  --now postfix

    #查看服务的依赖关系

    systemctl list-dependencies name.service

    #杀掉进程

    systemctl kill unitname

    #重新加载配置文件

    systemctl daemon-reload

    #关机

    systemctl halt、systemctl poweroff

    #重启

    systemctl reboot

    #挂起

    systemctl suspend

    #休眠

    systemctl hibernate

    #休眠并挂起

    systemctl hybrid-sleep




参考
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
