Como reiniciar o comando? WATCH quando um GPS USB é reconectado

2

Eu tenho alguns hacks para garantir que meus dispositivos GPS USB continuem cuspindo dados se forem desconectados e, em seguida, reconectados. Os dispositivos são tão escamosos que precisam ser reiniciados para continuar transmitindo dados.

Meu hack é ter um cron job executado a cada minuto (quero uma recuperação rápida), invocando um script que continua pedindo ao gpsd para continuar vendo todos os dispositivos configurados a cada minuto.

Então, adicionei esta linha em /etc/crontab :

* * * * * username /usr/bin/python /usr/local/bin/keepalive.py

E o conteúdo de /usr/local/bin/keepalive.py :

import socket
from syslog import syslog, openlog

CMD = '?WATCH={"class":"WATCH","json":true}'

def main():
   openlog(__file__)
   syslog('connecting to gpsd socket')
   try:
       sock = socket.create_connection(('localhost', 2947))
   except socket.error as e:
       syslog('connection failure: {0}'.format(e))
   else:
       syslog('CMD: ' + CMD)
       sock.sendall(CMD)
       syslog('success')
   finally:
       if sock:
          sock.close()

if __name__ == '__main__':
   main()

Também adicionei esta linha a /etc/udev/rules.d/custom.rules :

ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="flaky%n"

Isso porque eu posso ter mais de um desses dispositivos conectados ao mesmo tempo.

Existe alguma mágica do udev / gpsd que eu possa fazer para evitar esse truque?

    
por Tshepang 19.02.2013 / 08:24

0 respostas