在背景中运行的ngrok

mar*_*ger 19 terminal ngrok

我尝试在后台运行ngrok

./ngrok -subdomain test -config=ngrok.cfg 80 &
Run Code Online (Sandbox Code Playgroud)

该过程正在运行

[1] 3866
Run Code Online (Sandbox Code Playgroud)

并且子域不起作用.

它适用于

./ngrok -subdomain test -config=ngrok.cfg 80
Run Code Online (Sandbox Code Playgroud)

你们有谁知道这里发生了什么?

mar*_*ger 20

为解释在这里

ngrok -log=stdout 80 > /dev/null &
Run Code Online (Sandbox Code Playgroud)

  • 对ngrok2不起作用.有关新版本的任何想法吗? (2认同)

Art*_*iev 18

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

./ngrok http 8080 > /dev/null &
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我可能会建议使用 `curl --silent`(或 `curl -s`)和 `jq -r` 来获得更安静的输出。所以:双引号内的`$(curl -s http://localhost:4040/api/tunnels | jq -r '.tunnels[0].public_url')`。(随意将其纳入答案;暂时将其作为评论。) (4认同)

Oli*_*liv 13

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


Kir*_*hov 12

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

  • `nohup ngrok http 80 --log=stdout > ngrok.log &` 似乎更安全,以防 ssh 连接中断 (3认同)

Cha*_*ift 9

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

  • 但是,我如何知道访问我的服务的URL? (4认同)
  • 看到我的回答,有一种方法. (3认同)

Liu*_*kas 8

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

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

然后像参数中的screen那个类型ngrok命令之后的任何其他命令一样启动.

分离是屏幕中最强大的部分.屏幕允许您从窗口分离并稍后重新附加.

如果您的网络连接失败,屏幕将自动分离您的会话!您可以使用" Ctrl-a "" D " 从窗口分离.

这会让你回到你的shell.

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


小智 7

curl http://127.0.0.1:4040/api/tunnels 
Run Code Online (Sandbox Code Playgroud)

你会看到 public_url 信息。

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


bob*_*sie 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 ]"
Run Code Online (Sandbox Code Playgroud)

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

$ . start-ngrok.sh 1234

Run NGROK in background on port [ 1234 ]
Extracting ngrok public url ...
NGROK_PUBLIC_URL => [ 75d5faad.ngrok.io ]
Run Code Online (Sandbox Code Playgroud)

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

$ . start-ngrok.sh 

Run NGROK in background on port [ 8080 ]
Extracting ngrok public url ...
NGROK_PUBLIC_URL => [ 07e7a373.ngrok.io ]
Run Code Online (Sandbox Code Playgroud)

NGROK_PUBLIC_URL现在包含公开网址即

$ echo $NGROK_PUBLIC_URL
07e7a373.ngrok.io
Run Code Online (Sandbox Code Playgroud)

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

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

您还可以使用pkill/ killetc创建一个小脚本来停止后台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"
Run Code Online (Sandbox Code Playgroud)


Old*_*nda 6

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

  • 需要更正, nohup ./ngrok http 5000 > /dev/null & 所以当我们关闭终端时。进程不会被杀死 (2认同)

Poo*_*nam 6

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

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

ngrok -log=stdout 80 > ngrok.log &
Run Code Online (Sandbox Code Playgroud)

然后

curl http://127.0.0.1:4040/api/tunnels
Run Code Online (Sandbox Code Playgroud)

  • 使用 `ngrok --log=stdout 80 > ngrok.log &` 代替 (2认同)

Hem*_*lli 5

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

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


小智 5

尝试作为服务运行。并从 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
Run Code Online (Sandbox Code Playgroud)

配置文件:ngrok.yml authtoken:

tunnels:
  <your Tunel Name >:
    proto: http
    addr: 80
Run Code Online (Sandbox Code Playgroud)