À la fin d'un script que j'ai écrit, je souhaite envoyer une notification pour savoir quand il se termine. Le contenu du script n'est pas important, à l'exception de la partie notification.
Voici la partie importante du script:
#!/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'"
Quand je le lance depuis mon terminal, cela fonctionne bien.
J'ai créé un fichier de service dans /etc/systemd/system
avec le contenu suivant:
[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
Quand je le traverse sudo systemctl start test.notification
, Ça marche bien.
Le problème survient lorsque systemd s'exécute après mon exécution systemd enable test.notification
.
Si j'ajoute d'autres choses dans le script, elles sont terminées.
Ma description de service est-elle fausse? Mon instruction de notification manque-t-elle quelque chose?
Réponses:
Le problème est que systemd s'exécute avec un environnement minimal et que toutes les variables d'environnement ne sont pas connues pendant l'exécution du script. Pour que ça marche, j'ai changé
bash
par/bin/bash
.J'ai découvert ce qui n'allait pas en exécutant le script sans l'environnement:
Il a renvoyé l'erreur suivante:
Cette erreur est explicite et m'a aidé à trouver le problème.
la source