Рейтинг:1

как выполнить скрипт при выключении для wmctrl -l?

флаг cn

система: убунту 20

[Ед. изм]
Description=Запускать скрипты при запуске и остановке

[Оказание услуг]
Тип = ваншот
RemainAfterExit=true  
ExecStop=/home/user/same_test

[Установить]
WantedBy=многопользовательская.цель

тот же_тест:

#!/бин/ш
эхо-тест >> home/user/same_test_echo.txt (работает)
wmctrl -l >> /home/user/same_test.txt (не работает)

Результат:

  • same_test.txt пуст (не работает)
  • same_test_echo.txt содержит тест (работает)
guiverc avatar
флаг cn
Убунту 20? Так это система Ubuntu Core 20? так как они обычно безголовые. (Выпуски Ubuntu, использующие формат *year*, отличаются от гораздо более распространенных систем *year.month*, т.е. 20 != 20.04)
Рейтинг:0
флаг in

Вариант 1 - проверьте ПУТЬ

Первый шаг — посмотреть, не заключается ли проблема в том, где расположены команды:

$ тип - эхо

эхо - это встроенная оболочка
эхо - это /bin/echo

$ введите -a wmctrl

wmctrl — это /usr/bin/wmctrl

эхо встроена в оболочку, а также находится в папке /бин каталог, который является самым популярным каталогом для программ.

wmctrl команда находится в /USR/бен каталог, который может не быть частью вашего systemd ДОРОЖКА.

Так похоже на этот вопрос:

Решение заключалось в том, чтобы добавить строку в службу systemd:

[Оказание услуг]
Environment=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Другой вариант — жестко закодировать каталог для команды при ее вызове: /usr/bin/wmctrl.


Вариант 2 - WantedBy=многопользовательская.цель

ПРИМЕЧАНИЕ: Это универсальный вариант для тех, Запускать и не относится к Неисправность как делает ОП.

Если путь не был проблемой, следующим шагом будет проверка WantedBy вариант:

Ответ там объясняет:

Обратите внимание, что Wants или WantedBy говорит только о том, что система должна запускать одну службу всякий раз, когда запускается другая служба или цель, но ничего не указывает на порядок запуска/выключения. Если вам нужно, чтобы служба B уже работала при запуске службы A, вам нужно добавить Before=A.service в файл B.service, чтобы явно указать зависимость порядка запуска.

Учтите тот факт, что графический интерфейс может даже не работать, когда ваш скрипт запущен. Так что нет окон для wmctrl -l сообщить.

Если это проблема После (во время запуска), а не WantedBy является вероятным решением.


Вариант 3 - Использование /бен/правда

Из комментариев в этом вопросе и ответе:

Заменять:

RemainAfterExit=true

С:

RemainAfterExit=/bin/true

Примечание: истинный это встроенная оболочка и команда:

$ тип - истина
правда это встроенная оболочка
правда это /бен/правда
Igor Shumakov avatar
флаг cn
Я думаю, проблема в том, что служба работает при выключении после закрытия всех приложений и, возможно, графического интерфейса. Я пробовал: Before=graphical.target, но не работает Как запустить службу до закрытия всех приложений и графического интерфейса при выключении/перезагрузке?
WinEunuuchs2Unix avatar
флаг in
@IgorShumakov Вот дополнительное чтение, пока я копаю немного глубже для идеального соответствия: https://unix.stackexchange.com/questions/284598/systemd-how-to-execute-script-at-shutdown-only-not- при перезагрузке
Igor Shumakov avatar
флаг cn
Спасибо. Служба выполняется при завершении работы, но проблема в том, что wmctl -l все еще пуст.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.