我尝试使用以下命令在后台运行 ngrok:
./ngrok -subdomain test -config=ngrok.cfg 80 &
进程正在运行:
[1] 3866
并且子域不起作用。
它适用于:
./ngrok -subdomain test -config=ngrok.cfg 80
有谁知道这里出了什么问题?
谢谢你。
正如这里所解释的
ngrok -log=stdout 80 > /dev/null &
如前所述,您可以在后台运行 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 环境变量访问,您可以在任何地方使用它。
简单:ngrok http 80 --log=stdout > ngrok.log &
成功了。
在 Ngrok 2 中,-log 既不需要也不可用(尽管您可以在配置文件中控制日志级别)。ngrok > /dev/null &
足够了。
如果您想使用多个 shell 窗口或从单个 SSH 会话在后台运行任何服务,最简单的方法是使用screen。
要在 Centos Linux 上安装,请使用yum install screen
然后像任何其他命令一样开始screen
,在参数中键入ngrok
命令之后。
分离是屏幕最强大的部分。Screen 允许您从窗口中分离并稍后重新连接。
如果您的网络连接失败,screen 会自动断开您的会话!您可以使用“<strong>Ctrl-a”“<strong>D”从窗口中分离。
这会让你回到你的 shell 中。
所有屏幕窗口仍然存在,您可以稍后使用screen -r
curl http://127.0.0.1:4040/api/tunnels
你会看到 public_url 信息。
这是我编写的一个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.sh
ORsource 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"
./ngrok http 5000 > /dev/null &
然后运行curl localhost:4040/status
以检查 url
运行 ./ngrok http(端口号)& 这会将 ngrok 隧道作为后台进程运行。Ngrok 通常会打开一个显示分配的 URL 的窗口,但由于我们使用的是 nohup 命令,所以这是不可见的。
因此,然后运行curl http://127.0.0.1:4040/api/tunnels 也可以看到 ngrok 分配的 URL
尝试作为服务运行。并从 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
对 ngrok2 使用以下脚本
nohup ngrok http 3000 &
这会将日志写入文件 nohup.out
所以我尝试了所有方法,但在 2020 年有效的最佳答案是:
如何创建公共本地主机(8080):
ngrok -log=stdout 80 > ngrok.log &
然后
curl http://127.0.0.1:4040/api/tunnels
nohup ./ngrok http 80 &
点击 localhost:4040 获取 ngrok 分配的公共 URL
您可以为此使用屏幕。这是我如何使用它的示例:
screen -d -m ~/./ngrok http test.cc:8080
您可以使用cotunnel。这是 ngrok 的替代品。cotunnel 安装脚本创建服务并在后台自行运行。
在Windows 批处理脚本 (.bat)中,如果您想在不等待 ngrok 的情况下执行下一个命令,请使用以下命令和start /b:
start /b ngrok http 80 --log=stdout > ngrok.log &
./ngrok http 80 -log=stdout > /dev/null &
另一种选择是使用ngrok npm 模块。如果你安装了 Node,你可以运行 ngrok 并打印出如下所示的 URL:
require('ngrok').connect({ proto: 'http', port: 3000 }).then(url => {
console.log(url);
});
不严格在后台运行它,但我发现这是满足我要求的最简单方法:在单个命令中启动 ngrok 和知道其 ngrok url 的 Web 服务器。
nohup /usr/local/bin/ngrok --config /etc/ngrok.yml http 8080 &
如果你链接了ngrok账号,那么你可以在ngrok站点查看public url,不需要curl本地url public url https://dashboard.ngrok.com/status
两步:
首先在配置文件 (.ngrok2/ngrok.yml)中将console_ui设置为false
像这样运行命令
$ ./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"