Итак, у меня есть TCP-сервер, работающий на Pi (Jessie), принимающий такие команды, как «START», «STOP», «QUIT» и «REBOOT», и действующий в соответствии с ними. Например, «START» открывает скрипт (модуль, который отправляет сообщения в Thingsboard), а «STOP» убивает этот скрипт.
Я использую subprocess
, чтобы открыть новое окно GNOME-Terminal
с моим сценарием в качестве дочернего процесса при запуске. STOP просто убивает (pkill
) этот скрипт.
После получения команд сервер отвечает клиенту "XYZ полученный", так как в конце Pi должен работать без головы.
Когда все это выполняется вручную на Pi, все хорошо, как и предполагалось.
При автоматическом запуске того же TCP-сервера при загрузке с помощью systemd (в фоновом режиме) происходит следующее:
1) запускается нормально (статус = активен и работает), и
2) принимает, принимает и подтверждает получение команд, но
3) он не открывает GNOME-терминал (с подпроцессом)!
Я не понимаю, почему TCP-сервер работает нормально, но, похоже, не выполняет subprocess.call
?!
Вот часть кода ...
while True:
data = connection.recv(1024)
print " Received %s" % data
if data == "START":
connection.sendall("START received") >> WORKS FINE!
subprocess.call(['gnome-terminal', '-e', 'sudo python /home/pi/3DT/final_nova2.py']) >> DOESN'T HAPPEN!
С нетерпением жду ваших мыслей ... Спасибо!