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
配置说明:
- 服务将在MySQL服务启动后启动
- 使用root用户运行(生产环境建议使用专用用户)
- 工作目录设置为游戏服务器目录
- 输出日志到指定文件
- 服务崩溃后会自动重启
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
配置说明:
- 此服务依赖FLServer服务
- 其他配置与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. 最佳实践建议
-
日志管理:
- 使用logrotate定期轮转日志
- 为每个服务配置独立的日志文件
-
安全建议:
- 避免使用root用户运行服务
- 为游戏服务创建专用用户
- 限制服务目录权限
-
性能调优:
- 根据服务器负载调整RestartSec
- 监控服务资源使用情况
-
维护建议:
- 保持服务配置文件版本控制
- 记录每个服务的配置变更
- 定期检查服务日志
6. 常见问题排查
-
服务无法启动:
- 检查ExecStart路径是否正确
- 检查文件权限
- 查看journalctl日志:
journalctl -u 服务名
-
服务频繁重启:
- 检查应用程序错误日志
- 调整RestartSec参数
- 检查系统资源是否充足
-
依赖服务问题:
- 使用
systemctl list-dependencies
查看依赖关系 - 确保依赖服务已正确启动
- 使用