Мой Сервис SystemD файл выглядит следующим образом:
[Unit]
Description=XXX
After=sound.target network.target
Wants=sound.target
[Service]
ExecStart=/usr/bin/python3 -u raspberry.py
WorkingDirectory=/home/pi/Desktop
Restart=always
User=pi
PrivateTmp=true
[Install]
Alias=XXX
WantedBy=multi-user.target
Сценарий python является классическим клиентом python-socketio , который должен прослушивать такие события, как "listen" и играй".Основная часть кода выглядит следующим образом:
import subprocess
import socketio
HOST = "https://XXX.ngrok.io"
sio = socketio.Client(engineio_logger=True)
...
@sio.on('play')
def play(data):
print("play")
subprocess.call(["espeak", "'Not working'"])
if __name__ == '__main__':
subprocess.call(["espeak","'Initialized'"])
sio.connect(HOST)
sio.wait()
Когда я настраиваю службу для запуска при загрузке, выполняется первый вызов espeak и устанавливается сокет-соединение с моим сервером, но затем, если я отправляюсобытие (через мой сервер), второй вызов espeak не работает (нет звука).Если я загляну в журналы через journalctl -u XXX
, я увижу, что функция вызывается, потому что выполняется оператор print.
Что мне приходит в голову, так это то, что это происходит из-за запуска вызова подпроцесса из другого потока, но я не уверен ... есть идеи?