Пользовательский скрипт работает безупречно при использовании терминала, но пользовательский сервис не работает при запуске, но если я запустил его systemctl, он работает нормально

У меня есть настраиваемая служба в /etc/systemd/system/microphone_disable_startup.service

[Unit]
Description=Disable microphone on startup
After=alsa-restore.service

[Service]
ExecStart=/opt/bin/check_mic_startup

. Выполняемый сценарий - check_mic_startup, расположенный в / opt / bin

#!/bin/bash

# DEBUG: touch /home/GeorgeMP/Desktop/testfile_works

i_toggle=$(amixer get Capture toggle | grep -c "\[on\]")
if [ $i_toggle = 2 ] ; then
        amixer -q set Capture toggle
fi
amixer -q set Capture 0%
echo Microphone turned OFF
exit 0

Как видите, я пытался отладить службу с помощью сенсорной команды, и она работает безупречно, даже когда используется службой. Проблема заключается в более сложных командах в скрипте.

Выполняя systemctl status в моей пользовательской службе, я могу проверить, что служба прошла успешно без ошибок.

microphone_disable_startup.service - Disable microphone on startup
     Loaded: loaded (/etc/systemd/system/microphone_disable_startup.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Tue 2020-12-01 17:36:39 CET; 8min ago
    Process: 610 ExecStart=/opt/bin/check_mic_startup (code=exited, status=0/SUCCESS)
   Main PID: 610 (code=exited, status=0/SUCCESS)

Dec 01 17:36:39 GeorgeMP systemd[1]: Started Disable microphone on startup.
Dec 01 17:36:39 GeorgeMP systemd[1]: microphone_disable_startup.service: Succeeded.

Однако после перезапуска / завершения работы, даже если он выполнен успешно, команда не была выполнена или произошло без какого-либо эффекта, потому что

amixer get Capture
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 63
  Front Left: Capture 63 [100%] [30.00dB] [on]
  Front Right: Capture 63 [100%] [30.00dB] [on]
They are 100% and turned [on].

Они должны быть 0% и [выкл]

Если я выполняю / opt / bin / check_mic_startup из терминала, он работает безупречно. Даже в этом случае, если я запускаю systemctl микрофон_disable_startup.service. Это просто не работает при использовании моей настраиваемой службой микрофон_disable_startup.service В чем проблема?

РЕДАКТИРОВАТЬ 1:

Я изменил свой сценарий на этот, чтобы он также содержал каталог / opt / bin

#!/bin/bash

# DEBUG: touch /home/GeorgeMP/Desktop/testfile_works

# USE THESE IF NEEDED SOMEWHERE ELSE
    #DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
    #DISPLAY=":0.0"
export PATH="$PATH:/opt/bin"
i_toggle=$(/usr/bin/amixer get Capture toggle | grep -c "\[on\]")
if [ $i_toggle = 2 ] ; then
    /usr/bin/amixer -q set Capture toggle
fi
/usr/bin/amixer -q set Capture 0%
echo Microphone turned OFF
env > /home/GeorgeMP/Desktop/environment
exit 0

И я проверяю, все ли команды доступны для сценария в новой среде.

Кстати, файл среды, созданный на моем рабочем столе, имеет вид

LC_ADDRESS=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
PWD=/
LC_PAPER=en_US.UTF-8
LANG=en_US.UTF-8
INVOCATION_ID=549485b12a4149bb889e55d42711e923
LC_IDENTIFICATION=en_US.UTF-8
SHLVL=1
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_TIME=en_US.UTF-8
JOURNAL_STREAM=9:26568
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/bin
LC_NUMERIC=en_US.UTF-8
_=/usr/bin/env

, поэтому он содержит путь / opt / bin. Он по-прежнему не работает ... но когда я запускаю скрипт в терминале, он работает ...

1
задан 1 December 2020 в 21:29

0 ответов

Другие вопросы по тегам:

Похожие вопросы: