Envoyer une notification de systemd


0

À 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?


Peut-être que ça se termine avant que vous soyez connecté?
grawity

pour cet exemple simple, cela pourrait être le cas. Mais pour le script que je veux surveiller, il attend que le lecteur soit monté. Ce lecteur est monté manuellement.
A.D.

Réponses:


1

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:

env -i /path/to/script

Il a renvoyé l'erreur suivante:

sudo: bash: commande introuvable

Cette erreur est explicite et m'a aidé à trouver le problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.