You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下如何将Tmux运行TShock的脚本设为systemd启动服务

解决方案:修复systemd启动tmux内TShock服务器的问题

一、先排查TShock启动失败的原因

首先要明确TShock进程退出的具体原因,给启动脚本加上日志输出是最直接的方法:
修改/home/kokonoe/terraria/start-server.sh:

#!/bin/bash
# 显式设置必要的环境变量
export DOTNET_ROOT=/home/kokonoe/terraria/tshock/dotnet
export PATH=$DOTNET_ROOT:$PATH

# 将服务器输出重定向到日志文件,方便排查错误
/home/kokonoe/terraria/tshock/TShock.Server -config /home/kokonoe/terraria/serverconfig >> /home/kokonoe/terraria/server.log 2>&1

启动服务后查看日志:

cat /home/kokonoe/terraria/server.log

如果日志出现dotnet: command not found或类似依赖错误,说明环境变量配置不全。

二、优化systemd服务配置

systemd的运行环境和交互式shell差异很大,不要依赖~/.bashrc中的变量,直接在服务文件里配置更可靠。修改/etc/systemd/system/terraria-autostart.service:

[Unit]
Description=Runs TShock in a tmux session
After=network.target  # 确保网络就绪后再启动服务器

[Service]
# 使用绝对路径执行tmux命令,避免PATH查找问题
ExecStart=/usr/bin/tmux new -s tshock -d "/bin/bash /home/kokonoe/terraria/start-server.sh" && \
          /usr/bin/tmux split-window -t tshock -h "htop" && \
          /usr/bin/tmux last-pane -t tshock
User=kokonoe
WorkingDirectory=/home/kokonoe/terraria  # 设置工作目录为服务器所在路径
# 显式配置环境变量
Environment="DOTNET_ROOT=/home/kokonoe/terraria/tshock/dotnet"
Environment="PATH=/home/kokonoe/terraria/tshock/dotnet:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=30  # 给服务器足够的启动时间

[Install]
WantedBy=multi-user.target

三、重新加载服务并测试

执行以下命令使配置生效:

sudo systemctl daemon-reload
sudo systemctl restart terraria-autostart

之后用tmux attach -t tshock连接会话,检查两个pane是否正常运行;若仍有问题,再查看server.log中的错误信息定位问题。

四、关于最佳实现方式的说明

如果核心需求是稳定运行TShock服务器,更推荐直接用systemd托管TShock进程(无需tmux),这样systemd可以自动监控进程状态,崩溃时自动重启,配置示例:

[Unit]
Description=TShock Terraria Server
After=network.target

[Service]
User=kokonoe
WorkingDirectory=/home/kokonoe/terraria
Environment="DOTNET_ROOT=/home/kokonoe/terraria/tshock/dotnet"
Environment="PATH=/home/kokonoe/terraria/tshock/dotnet:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/home/kokonoe/terraria/tshock/TShock.Server -config /home/kokonoe/terraria/serverconfig
Restart=always  # 进程崩溃自动重启
RestartSec=5

[Install]
WantedBy=multi-user.target

如果确实需要在tmux中同时运行htop和服务器,之前的tmux方案是可行的,但要注意:tmux会话属于用户进程,systemd仅负责启动会话,不会监控会话内的服务器进程,若TShock崩溃,需手动重启或在脚本中添加监控逻辑。

内容的提问来源于stack exchange,提问作者Kokonoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:44:58