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

一、前言

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

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

posted @ 2020-03-10 21:23  Yogile  阅读(980)  评论(0编辑  收藏  举报