32

我尝试使用以下命令在后台运行 ngrok:

./ngrok -subdomain test -config=ngrok.cfg 80 &

进程正在运行:

[1] 3866

并且子域不起作用。

它适用于:

./ngrok -subdomain test -config=ngrok.cfg 80

有谁知道这里出了什么问题?

谢谢你。

4

21 回答 21

36

正如这里所解释的

ngrok -log=stdout 80 > /dev/null &
于 2014-11-27T05:33:32.823 回答
29

如前所述,您可以在后台运行 ngrok

./ngrok http 8080 > /dev/null &

接下来,您可以使用 curl 和例如jq命令行 JSON 处理器。

export WEBHOOK_URL="$(curl http://localhost:4040/api/tunnels | jq ".tunnels[0].public_url")"

您的 URL 可以从 $WEBHOOK_URL 环境变量访问,您可以在任何地方使用它。

于 2018-02-17T13:39:55.360 回答
15

简单:ngrok http 80 --log=stdout > ngrok.log &成功了。

于 2020-01-15T17:02:01.020 回答
15

在本地计算机上访问http://localhost:4040/status ,或在此处查看更多信息:在后台运行时查看随机 ngrok URL

于 2016-11-14T07:33:16.543 回答
11

在 Ngrok 2 中,-log 既不需要也不可用(尽管您可以在配置文件中控制日志级别)。ngrok > /dev/null &足够了。

于 2016-01-21T23:37:54.143 回答
8

如果您想使用多个 shell 窗口或从单个 SSH 会话在后台运行任何服务,最简单的方法是使用screen

要在 Centos Linux 上安装,请使用yum install screen

然后像任何其他命令一样开始screen,在参数中键入ngrok命令之后。

分离是屏幕最强大的部分。Screen 允许您从窗口中分离并稍后重新连接。

如果您的网络连接失败,screen 会自动断开您的会话!您可以使用“<strong>Ctrl-a”“<strong>D”从窗口中分离。

这会让你回到你的 shell 中。

所有屏幕窗口仍然存在,您可以稍后使用screen -r

于 2017-06-14T09:22:43.503 回答
7
curl http://127.0.0.1:4040/api/tunnels 

你会看到 public_url 信息。

这是示例。 https://i.stack.imgur.com/V0905.png

于 2018-12-27T09:17:37.577 回答
7

这是我编写的一个ngrok在后台运行的小 bash 脚本。然后它尝试NGROK_PUBLIC_URL通过调用curl命令(针对http://127.0.0.1:4040/api/tunnels)然后调用命令sed(提取 ngrok 公共 URL)来设置变量。这一切都在循环中运行,直到NGROK_PUBLIC_URL具有有效值,因为它通常需要 ngrok 2 或 3 秒才能建立隧道。

start-ngrok.sh

#!/bin/sh

# Set local port from command line arg or default to 8080
LOCAL_PORT=${1-8080}

echo "Start ngrok in background on port [ $LOCAL_PORT ]"
nohup ngrok http ${LOCAL_PORT} &>/dev/null &

echo -n "Extracting ngrok public url ."
NGROK_PUBLIC_URL=""
while [ -z "$NGROK_PUBLIC_URL" ]; do
  # Run 'curl' against ngrok API and extract public (using 'sed' command)
  export NGROK_PUBLIC_URL=$(curl --silent --max-time 10 --connect-timeout 5 \
                            --show-error http://127.0.0.1:4040/api/tunnels | \
                            sed -nE 's/.*public_url":"https:..([^"]*).*/\1/p')
  sleep 1
  echo -n "."
done

echo
echo "NGROK_PUBLIC_URL => [ $NGROK_PUBLIC_URL ]"

该脚本将端口作为可选的命令行参数,即

$ . start-ngrok.sh 1234

Run NGROK in background on port [ 1234 ]
Extracting ngrok public url ...
NGROK_PUBLIC_URL => [ 75d5faad.ngrok.io ]

...但8080如果未提供端口,将在端口上运行...

$ . start-ngrok.sh 

Run NGROK in background on port [ 8080 ]
Extracting ngrok public url ...
NGROK_PUBLIC_URL => [ 07e7a373.ngrok.io ]

现在NGROK_PUBLIC_URL包含公共网址,即

$ echo $NGROK_PUBLIC_URL
07e7a373.ngrok.io

这可以在您的应用程序中访问/使用。

注意:此脚本需要来源( . start-ngrok.shOR source start-ngrok.sh)。这是因为它设置了一个环境变量,如果在新的 shell(即./start-ngrok.sh)中正常运行,该变量将不可用。有关更多信息,请参阅https://superuser.com/q/176783

pkill您还可以使用/ etc创建一个小脚本来kill停止后台ngrok进程:-

stop-ngrok.sh

#!/bin/sh

echo "Stopping background ngrok process"
kill -9 $(ps -ef | grep 'ngrok' | grep -v 'grep' | awk '{print $2}')
echo "ngrok stopped"
于 2019-08-26T10:11:42.480 回答
6

./ngrok http 5000 > /dev/null &然后运行curl localhost:4040/status以检查 url

于 2017-09-27T02:43:04.703 回答
6

运行 ./ngrok http(端口号)& 这会将 ngrok 隧道作为后台进程运行。Ngrok 通常会打开一个显示分配的 URL 的窗口,但由于我们使用的是 nohup 命令,所以这是不可见的。

因此,然后运行​​curl http://127.0.0.1:4040/api/tunnels 也可以看到 ngrok 分配的 URL

于 2018-01-22T21:12:38.317 回答
4

尝试作为服务运行。并从 ngrok 网站查看。我在 Raspberry pi 3 上尝试了 ngrok 版本 2.2.8。

ngrok.service 作为

[Unit]
Description=Share local port(s) with ngrok
After=syslog.target network.target

[Service]
Type=simple
Restart=always
RestartSec=1min
StandardOutput=null
StandardError=null
ExecStart=/usr/local/sbin/ngrok start --log /var/log/ngrok.log --config /etc/ngrok.yml --all
ExecStop=/usr/bin/killall ngrok

[Install]
WantedBy=multi-user.target

配置文件:ngrok.yml authtoken:

tunnels:
  <your Tunel Name >:
    proto: http
    addr: 80
于 2018-04-16T22:03:53.740 回答
4

对 ngrok2 使用以下脚本

nohup ngrok http 3000 &

这会将日志写入文件 nohup.out

于 2017-02-09T09:19:06.277 回答
3

所以我尝试了所有方法,但在 2020 年有效的最佳答案是:

如何创建公共本地主机(8080):

ngrok -log=stdout 80 > ngrok.log &

然后

curl http://127.0.0.1:4040/api/tunnels
于 2020-05-03T22:16:50.963 回答
2

nohup ./ngrok http 80 &

点击 localhost:4040 获取 ngrok 分配的公共 URL

于 2019-06-17T15:51:30.367 回答
1

您可以为此使用屏幕。这是我如何使用它的示例:

screen -d -m ~/./ngrok http test.cc:8080

于 2018-05-15T23:07:23.393 回答
0

您可以使用cotunnel。这是 ngrok 的替代品。cotunnel 安装脚本创建服务并在后台自行运行。

于 2020-05-09T16:26:32.583 回答
0

Windows 批处理脚本 (.bat)中,如果您想在不等待 ngrok 的情况下执行下一个命令,请使用以下命令和start /b

start /b ngrok http 80 --log=stdout > ngrok.log &
于 2021-07-15T05:25:28.677 回答
0
./ngrok http 80 -log=stdout > /dev/null &
于 2021-03-06T14:18:42.413 回答
0

另一种选择是使用ngrok npm 模块。如果你安装了 Node,你可以运行 ngrok 并打印出如下所示的 URL:

require('ngrok').connect({ proto: 'http', port: 3000 }).then(url => {
  console.log(url);
});

不严格在后台运行它,但我发现这是满足我要求的最简单方法:在单个命令中启动 ngrok 和知道其 ngrok url 的 Web 服务器。

于 2020-07-13T18:05:08.467 回答
0
nohup /usr/local/bin/ngrok --config /etc/ngrok.yml http 8080 &

如果你链接了ngrok账号,那么你可以在ngrok站点查看public url,不需要curl本地url public url https://dashboard.ngrok.com/status

于 2019-01-04T00:01:39.147 回答
0

两步:

  1. 首先在配置文件 (.ngrok2/ngrok.yml)中将console_ui设置为false

  2. 像这样运行命令

    $ ./ngrok start demo &
    

额外:如果您通过 ssh 启动它,并且即使断开连接也希望它继续运行,像这样运行它

nohup ./ngrok start demo &

我的配置文件示例

    authtoken: XXXXX
    region: us
    console_ui: false
    web_addr: localhost:4040


    tunnels:    
      demo:
        proto: http
        addr: 9090
        hostname: demo.mysite.com
        inspect: false
        auth: "demo:secret"
于 2021-10-26T13:28:15.083 回答