Skip to content
RATING3PROPublic

About

基于tmux的CS:GO与CS2服务端管理工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

csctl

简体中文 · English

通过 tmux 管理 Linux CS2 / CS:GO 专用服务器,支持中英文界面、配置编辑和 Tab 补全。CS2 还支持 SteamCMD 更新、实时日志与更新后检查。两个控制程序均可独立运行。

一键安装

安装到 /usr/local/bin/,按提示选择中文或 English:

curl -fsSL https://raw.githubusercontent.com/RATING3PRO/csctl/main/install.sh | bash

直接指定语言,跳过选择:

# 中文
curl -fsSL https://raw.githubusercontent.com/RATING3PRO/csctl/main/install.sh | bash -s -- --lang zh
# English
curl -fsSL https://raw.githubusercontent.com/RATING3PRO/csctl/main/install.sh | bash -s -- --lang en

已有完整仓库时,在项目目录执行:

bash install.sh             # 交互选择
bash install.sh --lang en   # 直接安装英文版

安装器优先使用本地文件,无需联网;独立脚本或管道安装从 GitHub main 下载。非 root 用户安装到默认位置时自动使用 sudo。在线安装使用 curl 或 wget。

运行依赖:Linux、Bash 4+、tmux、util-linux(flock)、GNU coreutils;切换用户需要 sudo,CS2 更新另需可用的 SteamCMD。安装器不创建游戏用户、不安装 SteamCMD。

# Debian / Ubuntu 基础运行依赖
sudo apt install bash tmux sudo util-linux coreutils bash-completion
内容 默认路径
控制程序,权限 0755 /usr/local/bin/cs2ctl、/usr/local/bin/csgoctl
Bash 补全 /usr/local/share/bash-completion/completions/cs2ctl、csgoctl
Zsh 补全 /usr/local/share/zsh/site-functions/_csctl
配置,首次 -e 创建 /etc/cs2ctl.conf、/etc/csgoctl.conf

重新安装可升级程序或更换默认语言,保留已有配置和服务器运行状态。全部文件下载完成、Bash 脚本通过语法检查后才开始安装。自定义位置使用 PREFIX="$HOME/.local" bash install.sh --lang en;打包可设置 DESTDIR。

语言

所选语言写入安装副本,用于帮助、提示、错误、新配置模板和 Zsh 补全说明。已有配置注释、自定义脚本及 SteamCMD / tmux / 系统工具的原始输出不会被翻译。

有终端时从 /dev/tty 读取选择,支持 curl | bash;无终端时默认中文,自动化安装建议显式使用 --lang zh / --lang en。安装器语言优先级:--lang > CSCTL_LANGUAGE > 交互选择 / 中文默认值。

运行时临时覆盖:

CSCTL_LANGUAGE=en cs2ctl --help
sudo CSCTL_LANGUAGE=en cs2ctl -e
sudo CSCTL_LANGUAGE=zh csgoctl status

快速开始

sudo cs2ctl -e       # 配置运行用户、目录和启动命令
sudo cs2ctl start
sudo cs2ctl status
sudo cs2ctl attach   # Ctrl-b,然后 d:分离并保持运行
sudo cs2ctl stop

CS:GO 将 cs2ctl 替换为 csgoctl。

命令 行为
start 启动,已运行时不重复创建会话
stop 使用 tmux kill-session 停服,已停止时成功返回
restart 停止后重新启动
attach 进入 tmux 控制台
status 显示会话名、窗口数、连接数;运行时退出码 0,未运行时 3
chown 递归修改 CHOWN_DIR 的用户和组为 RUN_USER:RUN_USER
update,仅 CS2 停服 → 更新 → 检查 → 保持停止;加 --validate 完整校验游戏文件
check,仅 CS2 单独执行更新后检查,实时输出并保存日志
-e / --edit 编辑配置,校验后保存

status 检查会话是否存在,不代表游戏已完成启动。stop 直接关闭会话,不执行游戏内的优雅退出流程。

配置

-e 类似 crontab -e:首次生成模板,使用 $VISUAL、$EDITOR 或 vi 编辑,语法校验通过后原子保存。失败时保留原配置并给出编辑副本路径。新配置权限为 0600,已有配置保留权限和所有者。

sudo EDITOR=nano cs2ctl -e
sudo EDITOR='vim -f' csgoctl -e

# 普通用户使用自己的配置,将 RUN_USER 设为自己
cs2ctl -c "$HOME/.config/csctl/cs2.conf" -e
cs2ctl -c "$HOME/.config/csctl/cs2.conf" start

所有命令支持 -c FILE、--config FILE、--config=FILE。修改会话、修改目录所有权、更新、检查和编辑需要配置目录可写,以创建互斥锁;默认 /etc 配置请统一通过 sudo 管理。

配置项 用途
RUN_USER tmux、SteamCMD 和检查脚本的用户,默认 csgo
SESSION 精确会话名:字母、数字、下划线、短横线,不能以短横线开头
WORKDIR 游戏及检查脚本的工作目录,使用绝对路径
CHOWN_DIR chown 递归修改所有权的目录,使用绝对路径
CMD 交给 Bash 执行的完整启动命令
STEAMCMD,仅 CS2 可执行文件名或绝对路径,例如 /usr/games/steamcmd,不附参数
STEAM_INSTALL_DIR,仅 CS2 安装根目录;留空时省略 force_install_dir
UPDATE_LOG_DIR,仅 CS2 日志绝对目录;留空使用配置同级的 cs2ctl-logs/
POST_UPDATE_SCRIPT,仅 CS2 更新成功后执行的多行 POSIX sh 脚本

配置是调用者加载的 Bash 代码,只交给可信管理员编辑。双引号在加载配置时展开变量,单引号保留变量到游戏启动时展开。CMD 中可用 $PWD 引用工作目录,conf 普通变量不会自动传入游戏环境。切换用户使用 sudo -H -u 和 Bash 登录环境;已是运行用户时沿用当前环境。

修复目录所有权

通过 -e 设置 CHOWN_DIR。新配置模板使用以下默认路径;已有配置需手动补上该项:

# /etc/cs2ctl.conf
CHOWN_DIR='/home/csgo/Steam/steamapps/common/Counter-Strike Global Offensive'

# /etc/csgoctl.conf
CHOWN_DIR='/home/csgo/Steam/steamapps/common/Counter-Strike Global Offensive Beta - Dedicated Server'

执行:

sudo cs2ctl chown
sudo csgoctl chown

以 root 权限执行 chown -R --preserve-root -- "$RUN_USER:$RUN_USER" "$CHOWN_DIR";调用者不是 root 时通过 sudo 提权。用户和组均使用 RUN_USER,系统中必须存在该用户及同名组。命令会解析目录实际路径,拒绝空路径、不存在的目录和文件系统根目录;执行失败保留 chown 的退出码。该命令无需 tmux 或 SteamCMD,也不会启停服务器。

CS2 更新与检查

sudo cs2ctl update   # 正常更新,自动停服;完成后保持停止
sudo cs2ctl update --validate  # 需要完整校验游戏文件时使用
sudo cs2ctl check    # 单独检查,或修复文件后重新检查
sudo cs2ctl start    # 确认结果后手动启动

默认以 RUN_USER 执行 login anonymous → app_update 730 → quit,并设置遇错退出和禁止密码提示。只有显式添加 --validate 时才执行 app_update 730 validate,用于完整校验游戏文件。正常更新不主动要求全量校验,但 SteamCMD 仍可能执行更新所需的检查。

STEAM_INSTALL_DIR 非空时,在登录前添加 force_install_dir。它应指向安装根目录,不是 game/bin/linuxsteamrt64,并与 WORKDIR 对应同一安装。

stdout/stderr 实时显示并保存到日志,默认位于 /etc/cs2ctl-logs/。SteamCMD 返回 0 且报告 App 730 安装成功或已是最新版本后才运行检查;检查失败返回非零。程序始终保持停服,成功时提示手动启动。停服后,即使更新准备步骤或日志创建失败,也不会自动恢复服务器。

默认检查是空操作。在 -e 中编辑 POST_UPDATE_SCRIPT,例如检查标准目录布局中的 Metamod 配置:

POST_UPDATE_SCRIPT=$(cat <<'CSCTL_POST_UPDATE'
# 根据 WORKDIR 和实际需要检查的内容调整
file="$WORKDIR/../../csgo/gameinfo.gi"
test -f "$file" || { echo "文件不存在: $file" >&2; exit 1; }
grep -Fq 'Game csgo/addons/metamod' "$file" || {
    echo '检查失败:缺少 Metamod 配置' >&2
    exit 1
}
echo '检查通过'
# 或调用外部脚本:sh /home/csgo/check-after-update.sh
CSCTL_POST_UPDATE
)

检查通过 sh -eu 在 WORKDIR 中运行,提供 WORKDIR、SESSION、RUN_USER、STEAM_INSTALL_DIR 环境变量。应显式检查关键命令退出码;sh -e 不检测管道中间命令的失败。

Tab 补全

Bash 启用 bash-completion 后通常会自动加载,也可立即加载:

source /usr/local/share/bash-completion/completions/cs2ctl

Zsh 在 ~/.zshrc 中配置:

fpath=(/usr/local/share/zsh/site-functions $fpath)
autoload -Uz compinit && compinit

支持命令、选项和配置路径补全。自定义 PREFIX 时调整路径;sudo cs2ctl … 还依赖 shell 自身的 sudo 补全。

排查与开发

公共实现位于 src/common.bash,src/*.conf 为中英文模板。根目录两个程序为独立分发产物,运行时不依赖 Python 或源码目录。

python3 tools/build.py
python3 tools/build.py --check
bash tests/test.sh
bash tests/test-install.sh
bash tests/test-tmux.sh

前两组测试使用模拟命令和临时目录;最后一组用独立 socket 验证真实 tmux,缺少依赖时明确跳过。它们不启动真实游戏或下载 App 730。

默认启动参数参考原始 CS2 脚本 和 CS:GO 脚本。许可证:GPL-3.0。

About

基于tmux的CS:GO与CS2服务端管理工具

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages