У меня возникла проблема с запуском GPSD на Beaglebone Green. Я получаю ошибку привязки сокета:
root@BBG1:/etc/init# gpsd -D3 -n -N /dev/ttyUSB0
gpsd:INFO: launching (Version 3.16)
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:INFO: command sockets creation failed, netlib errors -1, -1
Похоже, проблема распространена на этих мини-досках (включая малину Pi), но то, что кажется проблемой для большинства людей, не сработало для меня. Близко, как я могу судить, это потому, что systemd/init били gspd.
root@BBG1:/etc/init# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2947 0.0.0.0:* LISTEN 1/init
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 375/connmand
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 493/sshd
tcp6 0 0 ::1:2947 :::* LISTEN 1/init
tcp6 0 0 :::8080 :::* LISTEN 631/apache2
tcp6 0 0 :::80 :::* LISTEN 1/init
tcp6 0 0 ::1:53 :::* LISTEN 375/connmand
tcp6 0 0 :::22 :::* LISTEN 493/sshd
tcp6 0 0 :::1880 :::* LISTEN 1/init
tcp6 0 0 :::3000 :::* LISTEN 1/init
Я пробовал:
изменить /lib/systemd/system/gpsd.socket, чтобы изменить ListenStream с [ f10] до 0.0.0.0:2947, но когда я перезагружаюсь, init привязывается к этому вместо этого (как видно из кода выше). sudo killall gspd, а затем снова перезапустить, но это, похоже, не помогает. измените /etc/default/gpsd на следующее:START_DAEMON="true"
GPSD_OPTIONS=""
DEVICES="/dev/ttyUSB0"
USBAUTO="false"
GPSD_SOCKET="/var/run/gpsd.sock"
пользовательский сценарий загрузки в /etc/rc.local (предполагается, что он задерживает запуск gpsd, но он не работает, потому что файл startgpsd.txt никогда не обновляется) #Start the gpsd daemon
/etc/booted/startgpsd.sh
exit 0
[ ! d3] , который указывает на startgpsd.sh
#!/bin/sh -e
#Need to wait past boot so everything is done
date "+%Y-%m-%d %H:%M:%S" > /startgpsd.txt
sleep 2
echo "Starting GPSD" >> /startgpsd.txt
/usr/local/sbin/gpsd /dev/ttyUSB0 -G -n -F /var/run/gpsd.sock
date "+%Y-%m-%d %H:%M:%S" >> /startgpsd.txt
exit 0
p
В какой-то момент, когда я обновил GSPD от v 3.11 (загружен с apt-get) до v 3.16 (загрузил двоичный файл и концерт + другой способ, чтобы я мог его построить), но он начал работать, но как только я перезагрузился, я вернулся к той же проблеме.
Есть ли способ остановить systemd от привязки к порту, чтобы вместо этого gpsd ( или это даже моя проблема)? Killing PID 1 не похоже на умную вещь, поэтому я еще не пробовал. Я почти готов уничтожить все и начать все сначала, но я подумал, что сначала попытаюсь использовать здесь «коллективную силу гения» (учитывая, что в прошлом я уже нашел несколько ответов на другие проблемы) .
Спасибо!
Изменить: добавление содержимого /lib/systemd/system/gpsd.socket
[Unit]
Description=GPS (Global Positioning System) Daemon Sockets
[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=[::1]:2947
ListenStream=0.0.0.0:2947
SocketMode=0600
[Install]
WantedBy=sockets.target