Как «отследить» службу systemd при запуске?
Я работаю над встроенной системой, использующей урезанную версию Ubuntu 22.04. Недавно мы обновили некоторое оборудование во встроенной системе, и я работаю над тем, чтобы наш образ Ubuntu работал на новом оборудовании.
На старом оборудовании служба PulseAudio всегда работала без каких-либо проблем, но на новом оборудовании возникла проблема: PulseAudio не обнаруживает карту Alsa 0, когда служба запускается во время загрузки. Если я перезапущу службу черезsystemctl --user restart pulseaudio.service
затем он обнаруживает карту Alsa 0, и все работает.
Я подозреваю, что Pulseaudio проверяет наличие символьного устройства в/dev/snd/
или, возможно, наличие файла/папки в/proc/asound/
, но искомое устройство или файл еще не существует и создается позже при загрузке модуля ядра.
Чтобы проверить свои подозрения, я пытаюсь запустить strace в сервисе во время загрузки. Я обновил /usr/lib/systemd/user/pulseaudio.service и изменил строку ExecStart следующим образом:
ExecStart=strace -e trace=file -o /home/user/trace_erronly_fail.log -Z -f -tt /usr/bin/pulseaudio --daemonize=no --log-target=journal --log-level=debug
После запускаsystemctl --user daemon-reload
, я пытаюсь запустить службу, чтобы проверить, будет ли работать трассировка, но служба не запускается. Статус службы сообщает следующее:
x pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor preset: enabled)
Active: failed (Result: core-dump) since Wed 2023-04-19 12:33:21 UTC; 2s ago
TriggeredBy: x pulseaudio.socket
Process: 1673 ExecStart=strace -e trace=file -o /home/user/trace_erronly_fail.log -Z -f -tt /usr/bin/pulseaudio --daemonize=no --log-target=journal --log-level=debug (code=dumped, signal=SYS)
Main PID: 1673 (code=dumped, signal=SYS)
CPU: 49ms
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Scheduled restart job, restart counter is at 5.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: Stopped Sound Service.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Start request repeated too quickly.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: pulseaudio.service: Failed with result 'core-dump'.
Apr 19 12:33:21 Ubuntu-V8 systemd[780]: Failed to start Sound Service.
Похоже, он поднимает сигнал SIGSYS, который, согласноman 7 signal
возникает при неправильном системном вызове.
Я не совсем понимаю, почему возникла эта проблема. Я могу запустить команду ExecStart вручную, не вызывая при этом сигнала SIGSYS, поэтому она выполняет это только тогда, когда запускается как служба systemd.
Итак, как я могу заставить strace работать при запуске в качестве службы systemd?