CentOS 7 添加服务(.service)文件,.service 文件详细介绍,并使之开机自启动

CentOS 7 添加服务(.service)文件,.service 文件详细介绍,并使之开机自启动

  • 一、.service 文件介绍
  • 二、每条指令详细介绍
  • 三、启用服务并设置开机自启动
  • 四、常用的命令


一、.service 文件介绍

  1. 在 CentOS 7 及更高版本中,systemd 是默认的初始化系统和服务管理器。.service 文件是 systemd 的单元配置文件,用于定义服务的启动、停止、依赖关系等行为。通过编写 .service 文件,可以将自定义服务集成到系统服务管理中,并实现开机自启动。

  2. .service 文件核心组成部分
    [Unit]
    描述服务的基本信息和依赖关系:

    Description:服务的描述信息。可以是任意字符串,用于描述服务。
    After:定义服务启动的依赖条件。

    • network.target 表示在网络就绪后启动。
    • network-online.target: 表示网络完全就绪(需 NetworkManager-wait-online.service 支持)。
    • syslog.target:表示系统日志服务就绪。
    • postgresql.service:表示依赖其他服务(如数据库)。
    • 可以定义多个依赖,以空格分隔
      如:
    After=network.target postgresql.service
    

    [Service]
    定义服务的运行参数:

    Type:进程类型(常见值:simple、forking)。

    类型 描述
    simple 默认值,主进程由 ExecStart 启动且不后台化(适用于前台程序)。
    forking 服务启动后会派生到后台(需配合 PIDFile 指定 PID 文件)。
    oneshot 进程退出后服务视为完成(适合执行一次性任务,如初始化脚本)。
    dbus 服务通过 D-Bus 激活(如桌面应用通信)。
    notify 服务通过 sd_notify 发送 READY=1 信号告知启动完成(需程序支持)。

    User 和 Group:运行服务的用户和组。应避免使用 root, 建议创建专用用户,如:

    # 创建专用用户 minecraft, 并授予文件权限
    sudo useradd -m -d /opt/minecraft minecraft
    sudo chown -R minecraft:minecraft /home/zzq/server
    

    ExecStart:启动服务的命令。
    WorkingDirectory:服务的工作目录。
    RestartSec: 服务退出后等待指定时间再重启,避免频繁重启导致系统负载过高。(5s、1min、2h 30min 等时间单位组合。)

    Restart:定义服务退出后的重启策略。

    策略 描述
    no 不重启(默认值)。
    always 无论退出状态码如何都重启。
    on-failure 仅在非正常退出(状态码非 0)时重启(推荐)。
    on-abnormal 仅在因信号终止或超时时重启。
    on-abort 仅在未正常终止(如 SIGABRT)时重启。
    on-watchdog 仅在看门狗超时时重启(需配置 RuntimeWatchdogSec)。

    [Install]
    定义服务的安装位置和启动目标:

    WantedBy:定义服务关联的 Systemd 目标(target)。

    目标 描述
    multi-user.target 多用户命令行模式(CentOS 7 默认运行级别 3)。
    graphical.target 图形界面模式(运行级别 5)。
    default.target 系统默认目标(通常是 multi-user.target 或 graphical.target)。
  3. 创建一个自定义 .service 文件(需要 root 权限)
    假设在 /home/zzq/server 目录下有一个 server.jar 程序,Minecraft 的服务端 jar 包,我想让他开机自启。

    # 在 /etc/systemd/system/ 目录下创建 minecraft.service 服务文件(需要 root 权限)
    vim /etc/systemd/system/minecraft.service
    

    将以下内容写入 minecraft.service 文件:

    [Unit]
    Description=Minecraft Server
    After=network.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/home/zzq/server
    ExecStart=/usr/bin/java -Xmx4G -Xms1G -jar server.jar nogui
    Restart=on-failure
    RestartSec=10s
    
    [Install]
    WantedBy=multi-user.target
    

二、每条指令详细介绍

  1. [Unit] 部分用于定义服务单元的通用信息和依赖关系。

    [Unit]
    
  2. Description 是一个描述性的文本,用于简要说明该服务的作用。这里表明此服务是用于运行 Minecraft 服务器的。

    Description=Minecraft Server
    
  3. After 定义了服务的启动顺序。network.target 代表网络服务单元,这意味着 minecraft.service 会在网络服务启动之后再启动,以确保服务器在启动时网络已经可用。

    After=network.target
    
  4. [Service] 部分用于配置服务的具体运行方式和参数。

    [Service]
    
  5. Type 指定了服务的启动类型。simple 表示服务启动时,systemd 会认为主进程就是通过 ExecStart 启动的进程,不会等待该进程派生其他子进程。

    Type=simple
    
  6. User 用于指定服务以哪个用户的身份运行。这里设置为 root,意味着服务将以超级用户的权限运行。通常不建议以 root 用户运行服务,因为这可能会带来安全隐患。

    User=root
    

    建议:创建专用用户(如 minecraft):

    sudo useradd -m -d /home/minecraft minecraft
    

    修改文件权限,将 /home/zzq/server 文件的所属权赋予给:minecraft 用户

    sudo chown -R minecraft:minecraft /home/zzq/server
    

    最后再将 minecraft.service 文件中的用户:root ,替换成专用用户:minecraft

  7. WorkingDirectory 定义了服务启动时的工作目录。在这里,Minecraft 服务器的工作目录是 /home/zzq/server,这意味着 server.jar 文件以及相关的配置文件和数据文件都应该存放在这个目录下。

    WorkingDirectory=/home/zzq/server
    
  8. ExecStart 是服务启动时要执行的命令。这里使用 java 命令来启动 Minecraft 服务器。/usr/bin/java 表示 java 程序的绝对路径,-Xmx4G 表示 Java 虚拟机最大可用内存为 4GB,-Xms1G 表示 Java 虚拟机初始分配的内存为 1GB,-jar server.jar 用于执行 server.jar 文件,nogui 表示以无图形界面的方式启动服务器。

    ExecStart=/usr/bin/java -Xmx4G -Xms1G -jar server.jar nogui
    
  9. Restart 指定了服务在什么情况下会自动重启。on-failure 表示当服务以非零退出状态码退出时,systemd 会自动尝试重启该服务。

    Restart=on-failure
    
  10. RestartSec 定义了服务重启前的等待时间。这里设置为 10 秒,意味着服务在失败后会等待 10 秒再尝试重启。

    RestartSec=10s
    
  11. [Install] 部分用于配置服务的安装信息,即服务如何被激活。

    [Install]
    
  12. WantedBy 定义了服务在哪些目标(target)下会被激活。multi-user.target 代表多用户模式,这意味着当系统进入多用户模式时,minecraft.service 会被自动启动。

    WantedBy=multi-user.target
    

三、启用服务并设置开机自启动

  1. 重载 systemd 配置
    systemctl daemon-reload
    
  2. 启动服务
    systemctl start hello.service
    
  3. 设置开机自启动
    systemctl enable hello.service
    
  4. 检查服务状态
    systemctl status hello.service
    

四、常用的命令

命令 说明
systemctl start 启动服务
systemctl stop 停止服务
systemctl restart 重启服务
systemctl enable 启用开机自启动
systemctl disable 禁用开机自启动
journalctl -u 查看服务日志

END


你可能感兴趣的:(Linux,centos,linux,运维,.service,服务文件)