【问题标题】:Starting ngrok and python app on startup在启动时启动 ngrok 和 python 应用程序
【发布时间】:2015-09-28 08:11:51
【问题描述】:

我目前正在一个特定端口上同时运行ngrock 和一个python 应用程序来给我的树莓派发短信,并让它通过Twilio 相应地响应我的消息。每次我的树莓派启动或重启时,我都需要使用./ngrok http 5000python /path/to/file/app.py 再次手动启动服务。为了避免这种情况,我按如下方式编辑了我的 cron 作业,并编写了一个名为 startService.py 的脚本。但是,它似乎无法正常运行,因为我在重新启动后没有收到短信回复。有什么想法吗?

Cron:

# m h  dom mon dow   command
*/5 * * * * python /rasp/system/systemCheck.py
@reboot python /Rasp/system/twilio/startService.py &

startService.py

import os
os.system('/./ngrok http -subdomain=ABC123  5000')
os.system('python /Rasp/system/twilio/starter/app.py')

【问题讨论】:

  • 这必须以 root 身份运行吗?如果是这样,那么你必须使用sudo crontab -e来设置命令。

标签: python linux unix cron ngrok


【解决方案1】:

您没有提及您的操作系统,假设您的操作系统使用 Upstart 进行引导,您可以创建 upstart 脚本来启动,然后您的进程将在启动时或进程终止时自动生成。对于 ngrok,创建一个文件 /etc/init/ngrok.conf

# Ngrok
#
# Create tunnel provided by ngrok.io

description "Ngrok Tunnel"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5
umask 022

exec /ngrok http -subdomain={{My Reserved Subdomain}} 5000

现在它将在启动时自动启动。如果您想手动启动,只需发出命令即可。

$ sudo service ngrok start

仅作为建议,将二进制文件放在根目录 / 不是好的做法。

参考: http://notes.rioastamal.net/2016/05/starting-ngrok-automatically-at-boot.html

【讨论】:

  • 如何将参数传递给start,比如start --all,这样它就可以获取ngrok.yml文件?
  • @IgorGanapolsky,默认情况下,ngrok 将从 $HOME/.ngrok2/ngrok.yml 读取配置,以读取除默认路径以外的 ngrok.yml,您可以在执行 ngrok 应用程序时使用 -config。 exec /ngrok http -config=/my/config/ngrok.yml -subdomain={{My Reserved Subdomain}} 5000ngrok.com/docs#config-location
  • 不,默认情况下 ngrok 不会读取 所有 个子域,除非您告诉它。
  • 如果是Failed to start ngrok.service: Unit ngrok.service not found.,解决方法是:python - Failed to start <myapp>.service: Unit <myapp>.service not found - Ask Ubuntu
【解决方案2】:

在多次尝试失败后,我似乎想出了一个工作系统。我首先必须通过执行以下操作来授权 root 用户使用我的 ngrok 帐户:

sudo su
./ngrok authtoken {{Insert Your Auth Token Here}}
exit

然后,我创建了 ngrokLauncher.sh 和 appLauncher.sh,如图所示。

ngrokLauncher.sh:

#!/bin/sh
# launcher.sh

cd /
./ngrok http -subdomain={{My Reserved Subdomain}} 5000 &
cd /

appLauncher.sh:

#!/bin/sh
# launcher.sh

cd /Storage/system/twilio/starter
python app.py &
cd /

然后,我修改了文件权限,以便它们能够在启动时运行sudo chmod 755 ngrokLauncher.sh &amp;&amp; sudo chmod 755 appLauncher.sh。最后,我将 Cron Jobs 编辑如下:

Crontab:

# m h  dom mon dow   command
*/5 * * * * python /SKYNET/system/systemCheck.py
@reboot sh /Storage/ngrokLauncher.sh >/Storage/logs/cronlog 2>&1
@reboot sh /Storage/appLauncher.sh >/Storage/logs/cronlog 2>&1

然后在运行sudo reboot后,系统重新启动,我收到了来自python应用程序的短信回复。

【讨论】:

  • 为什么不使用暴发户?
  • 在哪里保存 .sh 文件?以及启动 sh 文件的脚本是什么?
猜你喜欢
  • 2016-08-05
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多