zoukankan      html  css  js  c++  java
  • 树莓派 自启动连接阿里云物联网平台(二)

    一、前言

    在上一篇 树莓派 自启动连接阿里云物联网平台(一) 中,我们讲了 "树莓派 连接阿里云物联网平台" 的部分,这一篇我们讲如何使 aliyun_iot_device_quickstart 的脚本程序实现开机自启动上报数据到阿里云物联网平台。

    二、修改启动脚本文件

    1. 查看启动脚本文件

    • 如果你尝试在 aliyun_iot_device_quickstart 文件夹外(例:/home/pi),调用该文件夹下的 start.sh 文件,你就会发现在 /home/pi 文件夹下出现 package-lock.json 文件并报错:
    pi@raspberrypi:/home/pi $ sudo vim /usr/local/Extension/aliyun_iot_device_quickstart/start.sh
    ...
    ...
    Error: Cannot find module '/home/pi/index.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
    
    • 这个时候,如果直接将这个 start.sh 脚本文件设置为自启动,在下次开机时是不会运行的。因为执行自启动的目录同样不是 start.sh 的父目录。

    • 使用 sudo vim ./start.shaliyun_iot_device_quickstart 目录下打开脚本文件,显示:

    set -e
    
    if [ ! -d ./node_modules ]; then
    printf "Installing Aliyun Iot Device SDK...
    "
    npm install
    fi
    
    node ./index.js
    
    • 可以看出 start.sh 只能在 aliyun_iot_device_quickstart 目录下运行的原因,出在:

    • 第 3 行的 ./node_modules 和第 8 行的 ./index.js 上——它们都是使用的相对路径。

    2. 修改启动脚本文件 start.sh

    • /将第 3 行 "./node_modules" 修改为 node_modules 的绝对路径
    $(cd `dirname $0`; pwd)"/node_modules"
    
    • 将第 8 行 "./index.js" 修改为 index.js 的绝对路径
    $(cd `dirname $0`; pwd)"/index.js"
    
    • 修改结束的内容:
    set -e
    
    if [ ! -d $(cd `dirname $0`; pwd)"/node_modules" ]; then
    printf "Installing Aliyun Iot Device SDK...
    "
    npm install
    fi
    
    node $(cd `dirname $0`; pwd)"/index.js"
    

    三、设置脚本自启动

    请阅读我的另一篇博客 树莓派 脚本程序自启动 ,实现脚本程序自启动。

    四、重启测试

    输入 sudo reboot 重启,观察得:

    • 输入 ps -nux | grep index 查询含有 index 字符的进程:

      pi@raspberrypi:/usr/local/Extension/aliyun_iot_device_quickstart $ ps -aux | grep index
      root      2035 22.4  1.9 155876 38892 pts/1    Sl+  13:17   0:02 node /usr/local/Extension/aliyun_iot_device_quickstart/index.js
      pi        2049  0.0  0.0   7348   576 pts/0    S+   13:17   0:00 grep --color=auto index
      

      其中,root 权限、PID 为 2035 的进程就是自启动 aliyun_iot_device_quickstart 下的主程序,pi 权限、PID 为 2049 的就是查询进程。

    • 再查看"阿里云物联网平台'',就可以看到设备在线并上报数据:

  • 相关阅读:
    26 转义符 re模块 方法 random模块 collection模块的Counter方法
    25 正则表达式
    24 from 模块 import 名字
    24 from 模块 import 名字
    24 from 模块 import 名字
    23 析构方法 items系列 hash方法 eq方法
    21 isinstance issubclass 反射 _str_ _new_ _len_ _call_
    20 属性, 类方法, 静态方法. python2与python3的区别.
    python(1)
    python之字符串格式化
  • 原文地址:https://www.cnblogs.com/Yogile/p/12458790.html
Copyright © 2011-2022 走看看