이 시스템 서비스가 PortAudio가 오디오 장치에 쿼리하는 것을 방지하는 이유는 무엇입니까?

이 시스템 서비스가 PortAudio가 오디오 장치에 쿼리하는 것을 방지하는 이유는 무엇입니까?

몇 시간 동안 나는 매우 이상한 문제에 직면했습니다. 정말 두 가지인 것 같습니다.정말 상관없는 일들: 시스템 서비스(아무 작업도 수행하지 않음!) 및 사용 가능한 오디오 장치 목록.

/etc/systemd/system/myservice.service더 정확하게 말하면 시작 시 최대한 빨리 실행되는 서비스가 있습니다.

[Unit]
Description=Test
DefaultDependencies=false
[Service]
Type=simple
ExecStart=/usr/bin/python /root/foo.py
WorkingDirectory=/root/
[Install]
WantedBy=local-fs.target

foo.py다음을 사용하여 오디오 장치를 쿼리하십시오.sounddevicePython 모듈(PortAudio용 래퍼):

import sounddevice
print(sounddevice.query_devices(0))

이것은 완벽하게 작동하며 1개의 오디오 장치를 반환합니다.

그런데 두 번째 서비스를 추가하면 /etc/systemd/system/[email protected]실제로는 아무 작업도 수행하지 않습니다(처음에는 USB 장치를 마운트합니다).이 솔루션을 사용, 하지만 디버깅을 위해 이 부분을 제거했는데도 문제가 여전히 존재합니다! ):

[Unit]
Description=Mount USB Drive on %i
[Service]
Type=simple
ExecStart=/usr/bin/ls         # note: normally here we should automount USB devices, but the bug is still there with just a simple ls that does nothing!

이는 다음 udev 규칙에 의해 시작됩니다 /etc/udev/rules.d/99-local.rules.

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"

...다음과 같이 오디오 장치에 대한 쿼리가 실패합니다.

Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 778, in __init__
Dec 10 22:51:27 foo foo.sh[116]:     extra_settings, samplerate)
Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 2571, in _get_stream_parameters
Dec 10 22:51:27 foo foo.sh[116]:     info = query_devices(device)
Dec 10 22:51:27 foo foo.sh[116]:   File "/usr/local/lib/python2.7/dist-packages/sounddevice.py", line 569, in query_devices
Dec 10 22:51:27 foo foo.sh[116]:     raise PortAudioError('Error querying device {0}'.format(device))
Dec 10 22:51:27 foo foo.sh[116]: sounddevice.PortAudioError: Error querying device 0
Dec 10 22:51:27 foo systemd[1]: foo.service: Main process exited, code=exited, status=1/FAILURE
Dec 10 22:51:27 foo systemd[1]: foo.service: Failed with result 'exit-code'.

이 문제를 디버깅하는 방법은 무엇입니까?PortAudio가 오디오 장치에 대한 정보를 쿼리할 수 있다는 사실은 udev실제로 아무것도 하지 않는 두 번째 Systemd 서비스( 로 시작됨)와 전혀 관련이 없어야 한다고 생각하지 않습니까?

나는 전혀 관련이 없는 두 가지를 연결하는 실수에 대해 전혀 모릅니다.


참고: 제거하면 DefaultDependencies=false문제가 해결되는 것 같습니다. 하지만 DefaultDependencies=false시작하기 전에 네트워크가 준비될 때까지 기다리는 서비스는 지양해야 한다고 생각합니다 . 당신은 가지고 있습니까?이 옵션이 없는 다른 솔루션?

관련 정보