跳到主要内容

Linux系统服务配置指南

1. 系统服务基础概念

Systemd是现代Linux系统的服务管理系统,用于启动、停止和管理系统服务。主要特点:

  • 并行启动服务,加快系统启动速度
  • 按需激活服务
  • 服务依赖关系管理
  • 日志集成

2. 服务配置文件详解

Systemd服务配置文件通常位于:

  • /etc/systemd/system/ (系统管理员创建的本地服务)
  • /usr/lib/systemd/system/ (软件包安装的服务)

配置文件基本结构:

[Unit]
Description=服务描述
After=依赖服务

[Service]
Type=服务类型
User=运行用户
WorkingDirectory=工作目录
ExecStart=启动命令
Restart=重启策略

[Install]
WantedBy=目标

主要参数说明:

  • Type:simple(默认)、forking、oneshot等
  • Restart:no、on-success、on-failure、always等
  • WantedBy:指定服务所属的运行级别

3. 常用服务管理命令

# 重新加载服务配置
systemctl daemon-reload

# 启用服务(开机自启)
systemctl enable 服务名

# 禁用服务
systemctl disable 服务名

# 启动服务
systemctl start 服务名

# 停止服务
systemctl stop 服务名

# 重启服务
systemctl restart 服务名

# 查看服务状态
systemctl status 服务名

4. 游戏服务器服务配置示例

4.1 FLServer 服务配置

[Unit]
Description=FLServer 游戏服务
After=mysqld.service

[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/home/game/Server/
ExecStart=/home/game/Server/FLServer
RestartSec=1
StandardOutput=append:/home/game/Server/log/FLServer.log
StandardError=append:/home/game/Server/log/FLServer-err.log

[Install]
WantedBy=multi-user.target

配置说明:

  1. 服务将在MySQL服务启动后启动
  2. 使用root用户运行(生产环境建议使用专用用户)
  3. 工作目录设置为游戏服务器目录
  4. 输出日志到指定文件
  5. 服务崩溃后会自动重启

4.2 UserServer 服务配置

[Unit]
Description=UserServer 用户服务
After=FLServer.service

[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/home/game/Server/
ExecStart=/home/game/Server/UserServer
RestartSec=1
StandardOutput=append:/home/game/Server/log/UserServer.log
StandardError=append:/home/game/Server/log/UserServer-err.log

[Install]
WantedBy=multi-user.target

配置说明:

  1. 此服务依赖FLServer服务
  2. 其他配置与FLServer类似

4.3 SuperServer 服务配置

[Unit]
Description=SuperServer 管理服务
After=mysqld.service

[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/home/game/ztgame/
ExecStart=/home/game/ztgame/SuperServer
RestartSec=1
StandardOutput=append:/home/game/ztgame/log/SuperServer.log
StandardError=append:/home/game/ztgame/log/SuperServer-err.log

[Install]
WantedBy=multi-user.target

4.4 场景服务器集群配置

对于需要多个实例的场景服务器,可以创建多个服务文件:

# /etc/systemd/system/ScenesServer@.service
[Unit]
Description=ScenesServer 场景服务 %I
After=SuperServer.service

[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/home/game/ztgame/
ExecStart=/home/game/ztgame/ScenesServer
RestartSec=1
StandardOutput=append:/home/game/ztgame/log/ScenesServer%I.log
StandardError=append:/home/game/ztgame/log/ScenesServer-err%I.log

[Install]
WantedBy=multi-user.target

使用模板服务启动多个实例:

# 启动10个场景服务器实例
for i in {1..10}; do
systemctl enable ScenesServer@$i
systemctl start ScenesServer@$i
done

5. 最佳实践建议

  1. 日志管理

    • 使用logrotate定期轮转日志
    • 为每个服务配置独立的日志文件
  2. 安全建议

    • 避免使用root用户运行服务
    • 为游戏服务创建专用用户
    • 限制服务目录权限
  3. 性能调优

    • 根据服务器负载调整RestartSec
    • 监控服务资源使用情况
  4. 维护建议

    • 保持服务配置文件版本控制
    • 记录每个服务的配置变更
    • 定期检查服务日志

6. 常见问题排查

  1. 服务无法启动

    • 检查ExecStart路径是否正确
    • 检查文件权限
    • 查看journalctl日志:journalctl -u 服务名
  2. 服务频繁重启

    • 检查应用程序错误日志
    • 调整RestartSec参数
    • 检查系统资源是否充足
  3. 依赖服务问题

    • 使用systemctl list-dependencies查看依赖关系
    • 确保依赖服务已正确启动