在背景中运行的ngrok

时间:2014-11-27 03:21:31

标签: terminal ngrok

我尝试使用

在后台运行ngrok
./ngrok -subdomain test -config=ngrok.cfg 80 &

流程正在运行

[1] 3866

并且子域名不起作用。

适用于

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

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

20 个答案:

答案 0 :(得分:20)

解释here

ngrok -log=stdout 80 > /dev/null &

答案 1 :(得分:12)

访问本地计算机上的http://localhost:4040/status,或在此处查看更多内容:View random ngrok URL when run in background

答案 2 :(得分:12)

如前所述,您可以使用

在后台运行ngrok
pip install git+git://github.com/fchollet/keras.git

接下来,您可以使用curl,例如./ngrok http 8080 > /dev/null & 命令行JSON处理器。

jq

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

答案 3 :(得分:8)

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

答案 4 :(得分:8)

简单:{{1}}可以解决问题。

答案 5 :(得分:7)

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

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

然后在参数中的screen命令之后,像任何其他命令ngrok一样启动。

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

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

这会让你回到你的shell中。

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

重新附加到它们

答案 6 :(得分:6)

运行fgets然后./ngrok http 5000 > /dev/null &检查网址

答案 7 :(得分:5)

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

然后,运行 curl http://127.0.0.1:4040/api/tunnels 也看到ngrok指定的URL

答案 8 :(得分:3)

curl http://127.0.0.1:4040/api/tunnels 

,您将看到public_url信息。

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

答案 9 :(得分:3)

使用以下脚本编写ngrok2

member.RuntimeMethodInfo.base.m_cachedData

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

答案 10 :(得分:1)

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

ngrok.service as

[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

答案 11 :(得分:1)

这是我写的一个bash脚本,它在后台运行ngrok。然后,它尝试通过调用NGROK_PUBLIC_URL命令(针对http://127.0.0.1:4040/api/tunnels)后跟curl命令(提取ngrok公共URL)来设置sed变量。所有这些都在循环内运行,直到NGROK_PUBLIC_URL具有有效值为止,因为通常需要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.shsource start-ngrok.sh)。这是因为它设置了一个环境变量,如果在新的外壳程序(即./start-ngrok.sh)中正常运行,该变量将不可用。有关更多信息,请参见https://superuser.com/q/176783

您还可以使用pkill / 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"

答案 12 :(得分:1)

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

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

ngrok -log=stdout 80 > ngrok.log &

然后

curl http://127.0.0.1:4040/api/tunnels

答案 13 :(得分:0)

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

  

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

答案 14 :(得分:0)

nohup /usr/local/bin/ngrok --config /etc/ngrok.yml http 8080 &

如果您链接到ngrok帐户,则可以在ngrok站点中查看公共网址,而无需卷曲本地网址 公开网址https://dashboard.ngrok.com/status

答案 15 :(得分:0)

nohup ./ngrok http 80&

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

另一种替代方法是使用ngrok npm module。如果安装了Node,则可以运行ngrok并打印出如下所示的URL:

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

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

答案 18 :(得分:0)

./ngrok http 80 -log=stdout > /dev/null &

答案 19 :(得分:0)

Windows Batch Script (.bat)中,如果你想不等待ngrok就执行下一个命令,使用start /b的以下命令:

start /b ngrok http 80 --log=stdout > ngrok.log &