Ubuntu 22下为steam用户创建CS2服务器非Root systemd服务求助
Ubuntu 22下为steam用户创建CS2服务器非Root systemd服务求助
看起来你已经找对了方向,但大概率是服务文件的细节配置或者权限问题导致没生效,我来帮你一步步排查和修正:
1. 先确认脚本的基础权限
首先得保证steam用户能正常执行cs2-server脚本,先检查并调整权限:
# 给脚本加上执行权限 sudo chmod +x /usr/local/bin/cs2-server # 检查目录权限,确保steam能访问该目录 ls -ld /usr/local/bin
如果/usr/local/bin的权限不是rwxr-xr-x(即其他用户有读和执行权限),可以用sudo chmod 755 /usr/local/bin调整。
2. 修正systemd服务文件的关键配置
你的原始服务文件缺少几个关键项,比如工作目录、环境变量——手动运行时你在steam用户的shell环境里,而systemd默认没有这些上下文。这里给你一个修正后的版本:
[Unit] Description=CS2 Public Server 1 After=network.target network-online.target Wants=network-online.target # 确保网络完全就绪再启动服务 [Service] User=steam Group=steam WorkingDirectory=/home/steam/cs2-server # 替换成你的CS2服务器实际安装目录! ExecStart=/usr/local/bin/cs2-server @public1 start Restart=on-failure RestartSec=5 Type=simple # 如果你的脚本是前台运行(手动启动后不会立刻返回shell)就用这个;如果脚本会后台fork,换成Type=forking Environment="HOME=/home/steam" # 确保steam用户的HOME环境变量正确加载 # 如果脚本依赖其他环境变量,比如STEAM_PATH,可以在这里添加,比如 Environment="STEAM_PATH=/home/steam/steamcmd" [Install] WantedBy=multi-user.target
3. 重新部署并启动服务
把上面的服务文件保存到/etc/systemd/system/cs2-public1.service,然后执行以下命令:
# 重新加载systemd配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable cs2-public1.service # 启动服务 sudo systemctl start cs2-public1.service
4. 排查启动失败的方法
如果启动还是有问题,直接看日志找具体原因:
journalctl -u cs2-public1.service -f
日志里会明确告诉你是权限不足、找不到文件,还是环境变量缺失,针对性调整就行。
关于密码的问题
只要服务文件里指定了User=steam,服务就会以steam用户身份运行,完全不需要输入密码——systemd会直接切换到该用户执行,和你手动su steam后运行的权限完全一致。
备注:内容来源于stack exchange,提问作者lostsoul6




