ETS2 建立自启动系统服务

一、创建 脚本 文件

编辑并创建服务文件:

sudo vim /home/steam/ets2_sv/bin/linux_x64/server.sh

添加一下内容:

#!/bin/sh

# 服务器目录(使用绝对路径,防止软链接问题)
SERVER_HOME="/home/steam/ets2_sv/bin/linux_x64"

# Steam 运行库目录
STEAM_PATH="/home/steam/ets2_sv/linux64"

# 设置 `LD_LIBRARY_PATH`
export LD_LIBRARY_PATH="$STEAM_PATH:$SERVER_HOME:$LD_LIBRARY_PATH"

# 欧卡文档目录(可选)
export XDG_DATA_HOME="/home/steam/ets2_doc"

# PID 文件的绝对路径
PID_FILE="$SERVER_HOME/logs/server.pid"

# 日志文件
SERVER_LOG="$SERVER_HOME/logs/server.log"

# 启动参数
SERVER_OPTIONS="-nosingle -server server_packages.sii -server_cfg server_config.sii"

case "$1" in
    start)
        echo "🚀 正在启动 ETS2 服务器..."
        mkdir -p "$SERVER_HOME/logs"

        # 确保旧的 `awk` 进程被清理,避免日志进程残留
        AWK_PID=$(pgrep -f "awk.*server.log")
        if [ -n "$AWK_PID" ]; then
            echo "🛑 发现旧的日志进程 (PID: $AWK_PID),正在清理..."
            kill -9 $AWK_PID
        fi

        # 启动服务器,并使用 `awk` 处理日志(不影响 PID 记录)
        setsid "$SERVER_HOME/eurotrucks2_server" $SERVER_OPTIONS 2>&1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), "-", $0}' >> "$SERVER_LOG" &

        # 等待 `eurotrucks2_server` 启动
        sleep 2  

        # 获取 `eurotrucks2_server` 的真实 PID
        SERVER_PID=$(pgrep -f "eurotrucks2_server")
        echo $SERVER_PID > "$PID_FILE"

        echo "✅ ETS2 服务器已启动,PID: $SERVER_PID"
        ;;
  
    stop)
        if [ -f "$PID_FILE" ]; then
            PID=$(cat "$PID_FILE")
            echo "🛑 正在停止 ETS2 服务器 (PID: $PID)..."

            # 先尝试正常终止服务器
            kill $PID
            sleep 2  

            # 如果进程仍然存活,则强制终止
            if ps -p $PID > /dev/null 2>&1; then
                echo "⚠ 进程 $PID 仍然存活,尝试强制终止..."
                kill -9 $PID
            fi

            # 终止可能存在的 `awk` 进程
            AWK_PID=$(pgrep -f "awk.*server.log")
            if [ -n "$AWK_PID" ]; then
                echo "🛑 发现日志处理进程 (PID: $AWK_PID),正在清理..."
                kill -9 $AWK_PID
            fi

            # 清理 PID 文件
            rm -f "$PID_FILE"
            echo "✅ ETS2 服务器已完全停止。"
        else
            echo "⚠ ETS2 服务器未运行。"
        fi
        ;;
  
    restart)
        echo "🔄 正在重启 ETS2 服务器..."
        $0 stop
        sleep 3
        $0 start
        ;;

    status)
        if [ -f "$PID_FILE" ]; then
            PID=$(cat "$PID_FILE")
            if ps -p $PID > /dev/null 2>&1; then
                echo "✅ ETS2 服务器正在运行,PID: $PID"
            else
                echo "⚠ ETS2 服务器的 PID 文件存在,但进程未运行!"
                rm -f "$PID_FILE"  # 清理无效的 PID 文件
            fi
        else
            echo "⚠ ETS2 服务器未运行。"
        fi
        ;;

    *)
        echo "🚀 ETS2 服务器管理命令"
        echo "🔹 用法: ets2_sv {start|stop|restart|status}"
        echo "  start    - 启动 ETS2 服务器"
        echo "  stop     - 停止 ETS2 服务器"
        echo "  restart  - 重启 ETS2 服务器"
        echo "  status   - 查看 ETS2 服务器状态"
        exit 1
        ;;
esac

二、创建软连接

ln -s /home/steam/ets2_sv/bin/linux_x64/server.sh /usr/local/bin/ets2_sv

权限:

sudo chmod +x /home/steam/ets2_sv/bin/linux_x64/server.sh
sudo chmod +x /usr/local/bin/ets2_sv

三、权限问题

入股出现权限问题执行:

sudo chmod +x 
sudo chown -R steam:steam /home/steam/ets2_sv/bin/linux_x64/
sudo chmod -R 775 /home/steam/ets2_sv/bin/linux_x64/
sudo chown -R steam:steam /home/steam/ets2_sv/bin/linux_x64/logs
sudo chmod -R 775 /home/steam/ets2_sv/bin/linux_x64/logs
sudo chown -R steam:steam /home/steam/ets2_doc/Euro\ Truck\ Simulator\ 2/
sudo chmod -R 775 /home/steam/ets2_doc/Euro\ Truck\ Simulator\ 2/
最后修改:2025 年 04 月 09 日
咱们谁跟谁,用不着~