правило udev работает, но не может отправить пакет udp - PullRequest
0 голосов
/ 01 февраля 2020

У меня проблема с правилом udev. Я использую Raspbian Buster с ядром 4.19.93-v7 + # 1290. Во-первых, если я выполняю скрипт вручную, он работает. Правило udev также выполняет сценарий, но прерывает отправку обновленного пакета. (Я отправлю пакет обновлений на localhost, который регистрирует другая программа). Вот рабочий скрипт с отладочным кодом:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Import der notwendigen Bibliotheken
import os
import sys
import getpass
import socket

f = open('/home/pi/scripts/keypad/client.txt','a')
f.write('Starting Script from Udev-Rule as user: ')
f.write(str(getpass.getuser()))
#f.write('\n')
f.close()

try:
    # Serververbindung öffnen, an Port binden und auf Lauschen stellen
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.sendto('1', ('127.0.0.1', 50000))
except:
    f=open('/home/pi/scripts/keypad/client.txt','a')
    f.write('\n')
    f.write(str(sys.exc_info()[0]))
    f.write(str(sys.exc_info()[1]))
    f.write(str(sys.exc_info()[2]))
    f.write('\n')
    f.close()

f = open('/home/pi/scripts/keypad/client.txt','a')
f.write('End of Script from Udev-Rule\n')
f.write('\n')
f.write('\n')
f.close()

Если я, но мое устройство в Rasbperry, скрипт будет исключен и прерван , Здесь вы не можете увидеть, что я записываю:

Starting Script from Udev-Rule as user: root
<class 'socket.error'>
[Errno 1] Operation not permitted
<traceback object at 0x76c36260>
End of Script from Udev-Rule

Если я сделаю это вручную, скрипт будет работать отлично. Я также попытался заменить код простой командой bash "echo" 1 "| n c -w1 -u 127.0.0.1 50000" . Но результат тот же. Вручную работает, если udev не работает.

У кого-нибудь есть идея?

...