У меня RPi 3b с установленным Stretch.Я генерирую и отправляю сообщение, когда Pi загружается о внешнем IP / внутреннем IP / SSID, с которым он связан.
У меня есть скрипт с командой, которая выполняет эти действия, и эта строка для построения сообщения какJSON отлично работает при запуске от имени пользователя pi или даже от имени пользователя root после sudo su -:
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": "Сб 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 будет работать, и они будут, когда я запустлюиз интерактивной оболочки, но при запуске при запуске они возвращаются пустыми.