openwrt路由器(RP-LINK)安装python并设置开机启动程序

2023-11-17

    由于项目需求+实际条件限制,需要在某台设备上运行一个python小程序,在工业机器人和云服务器之间实现信息转发的功能。因为机器人也需要通过路由器认证连接校园网,出于简化设备的考虑(不想每次跑程序还得开电脑),我决定尝试在路由器上运行这个程序。

   本人纯小白,不熟悉linux/openwrt,也是第一次倒腾路由器,怕多生周折就没有自己刷固件,直接买了校园网认证路由器。后面的过程大多参考网上的教程。在此总结和记录一下这个过程,备忘,也希望能对其他有相同需求的朋友提供一点帮助。

任务:1.挂载U盘(因为路由器本身的空间很小)

          2.安装Python,

          3.设置python程序开机自动后台运行(如果不能自启动那它就失去了灵魂)

工具:winscp: 文件管理

          putty:命令行控制

          diskgenius:格式化U盘

1.挂载U盘

通过putty登录路由器,命令行输入指令df -h能看到磁盘容量和使用情况,插入U盘后多出了以G为单位的磁盘空间,显然就是我们挂载的U盘了。


注意:列表里面Mounted on指示的位置才是挂载的位置,也就是U盘里面文件所在的位置。

一开始我是按照按默认选项格式化的U盘,路由器也能识别出来,但是后面安装Python的时候报了错(见下图)。谷歌了一下错误信息,有个类似的说是因为fat分区不支持Linux符号链接,需要用ext3/4的格式。重新格式化U盘后再插上,这次居然直接不识别了,尴尬o(╯□╰)o


后来看这个路由器的设置页面(192.168.1.1)上有设置挂载点的功能,这个功能我没琢磨明白,因为我设置之后好像也没啥变化。但是看到设置文件系统的下拉框有几个默认选项:sqashfs、vfat、exfat。抱着试一试的心态,就把U盘格成了exfat格式,后面就没有出现问题了(其实我现在有点怀疑上面的错误是由于我安装过程的操作不对造成的,但是也懒得再用原来的文件格式再试一次了


2.安装python

通过winscp连接路由器,找到/etc/opkg.conf文件,将文件内容修改为:

dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
# notice
dest usb /mnt/sdb1/opkg
 
arch all 100
arch ramips_24kec 200
arch ramips 300
arch mips 400
arch unkown 500
 
 
src/gz barrier_breaker_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz barrier_breaker_luci http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/luci
src/gz barrier_breaker_management http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/management
src/gz barrier_breaker_oldpackages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages
src/gz barrier_breaker_packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
src/gz barrier_breaker_routing http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/routing
src/gz barrier_breaker_telephony http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/telephony
 
#notice下面的 dest usb /mnt/sda1/opkg 就是指定变量 usb 为外置存储路径 /mnt/sda1/opkg 。保存文件后到命令行执行
opkg update

更新完成后就可以使用opkg -d usb install xxx即可将程序安装至/mnt/sda1/opkg

# 先需要安装libc,需要下载下来安装
## 建立文件夹
mkdir -p /mnt/sda1/opkg/src
cd /mnt/sda1/opkg/src
wget http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/libc_0.9.33.2-1_ramips_24kec.ipk
## 安装libc,最好安装到根下
opkg install libc_0.9.33.2-1_ramips_24kec.ipk
 
# 接着安装Python
opkg -d usb install libreadline
opkg -d usb install python
opkg -d usb install python-json
opkg -d usb install python-curl
opkg -d usb install python-openssl
 
# 路径
export PATH=$PATH:/mnt/sda1/opkg/usr/bin
echo 'export PATH=$PATH:/mnt/sda1/opkg/usr/bin' >> /etc/profile
 
# 别名
echo "alias opintall='opkg -d usb install'" >> /etc/profile

安装完成后可以命令行输入python然后进入python环境(出现>>>标志)或者python XXX.py来执行python程序。

主要参考链接:openwrt路由器安装python教程

3.设置开机启动项

路由器的开机启动项可以在路由器控制页面的“启动项”里设置启动脚本并应用。它本质上是修改路由器的/etc/rc.local文件,所以可直接通过winscp来修改这个文件。为了能够查看后台代码的运行状态,我们安装了nohup,安装方法见链接点击打开链接

将下面这句代码添加到exit 0之前:

nohup python /mnt/sda1/myProgram/app.py >/mnt/sda1/myProgram/output.txt 2.&1 &

这段代码表示后台用python运行app.py,输出保存到output.txt。其中:

    - >/mnt/sda1/myProgram/output.txt指定输出重定向的地址(运行前要通过winscp在这个地址上新建文件,

否则会保存到默认位置),如果不想保存输出可以定向到/dev/null,这是各地址相当于系统垃圾桶,输出的信息直接丢弃

    - 2>&1 表示系统错误输出(用2代表)stderr的重定向方式和标准输出(用1代表)stdout的方式一样。 &1表示和1一样

    - 最后一个&表示程序在后台运行。

保存rc.local文件后重启,查看前面设置的output.txt文件,发现输出了一个错误信息:找不到python。原因是在执行这个脚本的时候,

python的环境变量还没加载,因此要在执行python程序之前先加载环境变量。在etc/rc.local文件里面添加的指令改为:

PATH=$PATH:/mnt/sda1/opkg/usr/bin
nohup python /mnt/sda1/myProgram/app.py >/mnt/sda1/myProgram/output.txt 2.&1 &

修改后程序可以运行了,但是并没有如预期输出print的信息。这是因为python的输出有缓冲,导致nohup.out并不能够马上看到输出。

可以为python添加-u参数,使得python不启用缓冲。

PATH=$PATH:/mnt/sda1/opkg/usr/bin
nohup python -u /mnt/sda1/myProgram/app.py >/mnt/sda1/myProgram/output.txt 2.&1 &

主要参考链接:

python服务器后台运行nohup相关指令openwrt开机启动过程分析+添加自启动脚本

大功告成!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openwrt路由器(RP-LINK)安装python并设置开机启动程序 的相关文章

随机推荐

  • 原码、反码、补码的运算及在计算机中的作用

    一 概念简述 机器码 一个数在计算机中的二进制形式 机器码是带符号的 在计算机用机器码的最高位存放符号 正数为0 负数为1 如 0000 0011 和 1000 0011 机器码的真值 机器码除符号位剩下的真正数值 如 0000 0001的
  • python如何模拟键盘输入_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的 通过个人实践找到适合自己的 采用的python 库是 pymouse pykeyboard 安装时直接pip安装的 pip install PyUserInput 实现了一个最简单的输入密码 enter进入的登录
  • 四分位数与pandas中的quantile函数

    四分位数与pandas中的quantile函数 1 分位数概念 统计学上的有分位数这个概念 一般用p来表示 原则上p是可以取0到1之间的任意值的 但是有一个四分位数是p分位数中较为有名的 所谓四分位数 即把数值由小到大排列并分成四等份 处于
  • Streamlit 讲解专栏(十一):数据可视化-图表绘制详解(中)

    文章目录 1 前言 2 绘制交互式散点图 3 定制图表主题 4 增强数据可视化的交互性与注释 步骤1 步骤二 5 结语 1 前言 在上一篇博文 Streamlit 讲解专栏 十 数据可视化 图表绘制详解 上 中 我们学习了一些关于数据可视化
  • AI绘画是艺术还是技术?AI绘画会让插画师集体失业?

    今年以来 AI绘画的讨论热潮此起彼伏 过一段时间就会引起争议和恐慌 就在近日 日本推出一款名为mimic的AI绘画软件 被日本绘画圈集体声讨 许多画师公开禁止AI绘画 恰巧最近美国艺术圈里关于AI绘画也发生了一件大事 一副 数字绘画 作品获
  • day2 poc与exp学习之pikachu字符注入

    exp编写 这里以基于联合注入的exp为例子 1 全局变量 对数据存储以及http包头的自定义 url http 192 168 110 131 pikachu master vul sqli sqli str php 要验证注入点的url
  • IBM《智慧数据中心》

    部分内容摘要 IBM认为 数据中心的发展路径是从成本中心演变成为服务中心 其功能也从支撑业务发展到驱动业务 并进一步成为业务创新的加速器 未来数据中心将是智慧的 绿色的 灵活支撑业务发展的 实现监控可视化 控制自动化 管理流程化 信息系统从
  • 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

    目录 试题 A 日期统计 本题总分 5 分 试题 B 01 串的熵 本题总分 5 分 试题 C 冶炼金属 本题总分 10 分 试题 D 飞机降落 本题总分 10 分 试题 E 接龙数列 本题总分 15 分 试题 F 岛屿个数 本题总分 15
  • node.js express 文件服务器,如何用nodejs+express搭建一个简单的后台服务器?

    Express框架 根据官方的介绍 Express是一个基于Node js平台 快速 开放 极简的Web开发框架 安装 Express是一个基于Node js的平台 所以在安装Express之前 你得先确保你已经安装了Node js 打开命
  • 计算1到10的阶乘之和:1!+2!+3!+......+10!(C语言&&Python)

    计算1到10的阶乘之和 1 2 3 10 C语言 include
  • Java 文件上传 三种方式

    一 配置springBoot上传文件限制 spring servlet multipart max file size 100MB 单个文件大小 max request size 1024MB 总文件大小 二 代码 import org s
  • 【LVGL 学习】样式(style)过渡动画学习

    transition 过渡动画 当一个控件的状态发生改变时 可以让样式也发生变化以提醒用户 通过过渡动画 transition 可以让样式的改变更自然 例如 按钮在点击时 以及开关在切换时 都具有一小段的过渡动画 过渡动画使用 lv sty
  • Vue手动控制点击事件Click触发

    方法一 变量的值 触发函数 方法二 利用变量控制css样式设置其pointer event none
  • Dynamics 365 for Sales: Email Engagement

    今天我们来看看和电子邮件相关的新功能 Email Engagement 这个功能是用来跟踪电子邮件的反馈状态 非常适合做邮件营销的公司 在做邮件营销的时候 我们会对发出去的邮件进行反馈统计 例如 多少邮件被查看了 有多少邮件被回复了 有多少
  • 微信小程序:css弹出菜单+多语言切换功能

    如何用css写出弹出菜单效果以及它的使用 1 核心知识点 2 实现效果 3 注意点分解 4 代码源码 5 写在最后 1 核心知识点 1 弹出菜单 animation动画 transform属性 2 语言切换功能 点击事件函数catchtap
  • tar解压文件到指定目录出现Not found in archive

    使用tar解压文件到指定目录时出现Not found in archive是因为没有设置 C这个参数 create 解压后的文件只有 通过设置 C 注意要大写 这个参数 创建默认文件夹才能被成功解压 如需要把home目录下的 jdk 8u1
  • 企业微信自动打卡插件开发

    今日科技快讯 近日中国多家VPN供应商已收到了来自苹果公司的通知 通知主要告知这些供应商和开发者 他们的软件将从中国区App Store下架 对此苹果方面表示 工信部今年早些时候宣布 所有提供VPN服务的开发者必须获得政府的许可 我们被要求
  • rabbitmq 安装

    文章目录 RabbitMQ 安装 erlang安装 RabbitMQ安装 环境变量 管理界面 添加用户 配置允许远程访问的用户 未验证 RabbitMQ 安装 erlang安装 http www erlang org downloads R
  • 鼠标、键盘、窗口监听事件

    一 画笔paint 画笔 public class TestPaint public static void main String args new MyPaint loadFrame class MyPaint extends Fram
  • openwrt路由器(RP-LINK)安装python并设置开机启动程序

    由于项目需求 实际条件限制 需要在某台设备上运行一个python小程序 在工业机器人和云服务器之间实现信息转发的功能 因为机器人也需要通过路由器认证连接校园网 出于简化设备的考虑 不想每次跑程序还得开电脑 我决定尝试在路由器上运行这个程序