我有一个安装了Stretch的RPi 3b . 当Pi引导它连接的外部IP /内部IP / SSID时,我正在生成并发送消息 .

我有一个带有执行这些操作的命令的脚本,并且这行构建消息,因为JSON在以pi用户身份运行时工作正常,甚至在sudo su之后以root身份运行 - :

echo -e "{\"time\":\""$(date)"\",\"hostname\":\""$(hostname)"\", \"distro\":\""$(cat /etc/issue)"\",\"extip\":\""$(/usr/bin/curl ipecho.net/plain)"\",\"ssid\":\""$(/sbin/iwgetid -r)"\",\"lanip\":\""$(/bin/hostname -I)"\"}" > /home/pi/hostinfo.txt

当我在本地运行它时,此脚本工作正常(显示我期望的值在哪里):

{"time":"Sat Sep 29 17:12:31 EDT 2018","hostname":"<expected hostname>", "distro":"Raspbian GNU/Linux 9 
 \l","extip":"<expected external IP>","ssid":"<expected SSID>","lanip":"<expected LAN IP>"}

我试图在启动时运行它,命令运行正常并发送消息,但最后三个值为空:

-e {“time”:“Sep Sep 29 17:12:31 EDT 2018”,“hostname”:“”,“distro”:“Raspbian GNU / Linux 9 \ l”,“extip”:“”,“ SSID “:””, “lanip”: “”}

我已经将脚本调用添加到rc.local和crontab(不是同时),

rc.local中:

su pi -c '<path-to-script> > /home/pi/rpi-boot.log 2>&1'

crontab中:

@reboot <path to script>

无论哪种方式,脚本都按预期构建和传递消息,并且在rpi-boot.log中不显示任何错误,但是当它由rc.local或crontab运行时,前三个值(日期,主机名,发行版)会正确报告但最后三个是空白的 .

我认为把完整的路径放到主机名,curl和IP会起作用,当我从交互式shell运行时它们会这样做,但是当它们在启动时运行它们会返回空白 .