몇 시간 동안 나는 매우 이상한 문제에 직면했습니다. 정말 두 가지인 것 같습니다.정말 상관없는 일들: 시스템 서비스(아무 작업도 수행하지 않음!) 및 사용 가능한 오디오 장치 목록.
/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
다음을 사용하여 오디오 장치를 쿼리하십시오.sounddevice
Python 모듈(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
시작하기 전에 네트워크가 준비될 때까지 기다리는 서비스는 지양해야 한다고 생각합니다 . 당신은 가지고 있습니까?이 옵션이 없는 다른 솔루션?