• 树莓派 自启动连接阿里云物联网平台(二)


    一、前言

    在上一篇 树莓派 自启动连接阿里云物联网平台(一) 中,我们讲了 "树莓派 连接阿里云物联网平台" 的部分,这一篇我们讲如何使 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 的就是查询进程。

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

  • 相关阅读:
    第一次实验
    pta12
    《暗时间》读书笔记
    案例分析
    软件工程第二次作业
    阅读任务
    20210311_软工_准备工作
    学习总结
    第十四周学习总结&实验报告
    第十三周课程总结
  • 原文地址:https://www.cnblogs.com/Yogile/p/12458790.html
Copyright © 2020-2023  润新知