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

如何在指定端口存在入站流量时自动启动脚本?

如何在指定端口存在入站流量时自动启动脚本?

针对你的需求——电脑处于唤醒状态时,监测指定端口的入站流量并自动启动MC服务器脚本,同时不影响路由器的WOL唤醒功能,我整理了几个实用的方案,你可以根据自己的操作系统选择:

方案一:Linux/macOS 用 xinetd 实现(最简洁稳定)

xinetd 是 Linux 系统里专门用来监听端口、有连接请求时自动启动指定程序的服务,完全符合你的需求,而且配置简单:

  1. 安装 xinetd
    如果你用 Debian/Ubuntu:

    sudo apt-get install xinetd
    

    如果你用 CentOS/RHEL:

    sudo yum install xinetd
    
  2. 创建监听配置文件
    在 /etc/xinetd.d/ 目录下新建一个配置文件,比如 mc-server-trigger:

    service mc-trigger
    {
        disable = no
        socket_type = stream
        protocol = tcp
        port = 25565  # 替换成你的MC服务器端口
        wait = no
        user = your_username  # 替换成你的系统用户名
        server = /home/your_username/scripts/start-mc.sh  # 替换成你的启动脚本路径
        only_from = 0.0.0.0/0  # 允许所有IP访问,也可以指定特定IP段
        flags = REUSE
    }
    
  3. 编写启动脚本(避免重复启动)
    一定要在启动脚本里加个进程判断,防止同一端口有多次连接时重复启动服务器。比如 start-mc.sh:

    #!/bin/bash
    # 检查MC服务器进程是否已运行(假设用java启动)
    if ! pgrep -x "java" > /dev/null; then
        cd /path/to/your/mc-server-folder
        java -Xmx2G -Xms2G -jar server.jar nogui &
    fi
    

    给脚本加执行权限:

    chmod +x /home/your_username/scripts/start-mc.sh
    
  4. 重启 xinetd 生效

    sudo systemctl restart xinetd
    

    这个方案和WOL完全不冲突:电脑关机时xinetd不运行,路由器的WOL唤醒包正常工作;电脑开机后xinetd自动启动监听端口,有连接就触发脚本。

方案二:Windows 用 PowerShell 监听 + NSSM 做成服务

如果是Windows系统,可以用PowerShell写一个简单的端口监听脚本,再用NSSM把它做成开机自启的服务:

  1. 编写PowerShell监听脚本
    新建一个 Start-McOnConnection.ps1 文件,内容如下:

    $targetPort = 25565  # 替换成你的MC端口
    $mcServerPath = "C:\path\to\your\mc-server"  # MC服务器目录
    $startCommand = "java.exe"
    $startArgs = "-Xmx2G -Xms2G -jar server.jar nogui"
    
    # 启动TCP监听器
    $listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Any, $targetPort)
    $listener.Start()
    Write-Host "Listening for connections on port $targetPort..."
    
    while ($true) {
        # 等待入站连接
        $client = $listener.AcceptTcpClient()
        $client.Close()  # 不需要处理连接,只要检测到就触发
    
        # 检查MC服务器是否已运行
        if (-not (Get-Process -Name "java" -ErrorAction SilentlyContinue)) {
            Write-Host "Starting MC server..."
            Start-Process -FilePath $startCommand -ArgumentList $startArgs -WorkingDirectory $mcServerPath
        }
    
        # 加个延迟,避免短时间内多次触发
        Start-Sleep -Seconds 30
    }
    
    $listener.Stop()
    
  2. 用NSSM把脚本做成Windows服务

    • 下载NSSM(一个轻量的服务管理工具),解压后把它的路径加到系统环境变量里
    • 打开命令提示符(管理员权限),执行:
      nssm install MCServerTrigger
      
    • 在弹出的窗口里:
      • Path 选择 powershell.exe
      • Arguments 填 -ExecutionPolicy Bypass -File "C:\path\to\Start-McOnConnection.ps1"
      • 切换到Log On标签,选择本地系统账户(或者你的用户账户)
      • 点击Install service完成安装
    • 启动服务:
      nssm start MCServerTrigger
      

    同样,这个服务只有电脑开机时才运行,不会干扰路由器的WOL唤醒功能。

方案三:用 tcpdump 后台监听(通用但稍复杂)

如果不想用专门的服务,也可以用tcpdump(Linux/macOS)或者Windows的tcpdump替代工具(比如WinDump)来监听端口流量,触发脚本:

以Linux为例,写一个后台运行的脚本:

#!/bin/bash
PORT=25565
LOG_FILE=/var/log/mc-trigger.log

while true; do
    # 监听指定端口的TCP SYN包(连接请求)
    tcpdump -i any -n tcp port $PORT and 'tcp[tcpflags] & tcp-syn != 0' -c 1 >> $LOG_FILE 2>&1
    # 检查服务器是否运行
    if ! pgrep -x "java" > /dev/null; then
        cd /path/to/mc-server
        java -Xmx2G -Xms2G -jar server.jar nogui &
        echo "Server started at $(date)" >> $LOG_FILE
    fi
    # 避免频繁触发
    sleep 60
done

把这个脚本加入开机自启(比如用crontab -e加@reboot /path/to/script.sh &),就能后台持续监听。

关于你提到的webserver方案

这个思路其实没必要,因为MC的连接是TCP协议而非HTTP,用webserver监听MC端口的话,需要额外处理非HTTP的连接请求,反而不如直接监听TCP连接的方案简单可靠,所以不推荐。

所有方案都和你的WOL设置不冲突:WOL是电脑关机时路由器发送唤醒包,而这些监听程序只有电脑开机后才会运行,两者完全独立,不会互相干扰。

备注:内容来源于stack exchange,提问作者Exo01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:13:12