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

Вот важная часть сценария:

#!/bin/bash

USER=<username>
USERID=`id -u $USER`

sudo -u $USER bash -c "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USERID/bus notify-send -t 5000 -u normal -i /usr/share/icons/Adwaita/32x32/devices/drive-removable-media.png 'Ah! the element of surprise'"

Когда я запускаю его из моего терминала, он работает хорошо.

Я создал служебный файл в /etc/systemd/system со следующим содержимым:

[Unit]
Description=Test notification
Requires=home.mount
After=home.mount

[Service]
ExecStart=/home/alexis/Personnalisation/Scripts/test.notification.sh
Type=oneshot

[Install]
WantedBy=graphical.target

Когда я запускаю его через sudo systemctl start test.notification , он работает хорошо.

Проблема возникает при запуске systemd после запуска systemd enable test.notification .

Если я добавлю другие вещи в сценарий, они сделаны.

Является ли описание моей услуги неправильным? В моей инструкции по уведомлению что-то отсутствует?

1 ответ1

1

Проблема в том, что systemd работает с минимальной средой, и не все envvar известны во время выполнения скрипта. Чтобы это работало, я изменил bash на /bin/bash .

Я выяснил, что не так, запустив скрипт без среды:

env -i /path/to/script

Он вернул следующую ошибку:

sudo: bash: команда не найдена

Эта ошибка говорит сама за себя и помогла мне найти проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .