web-dev-qa-db-fra.com

Comment afficher les messages de notification-envoi déclenchés par crontab?

test.sh: /usr/bin/notify-send "test"

Les œuvres suivantes: bash ~/Documents/test.sh

MAIS la crontab ne montre jamais la notification. Pourquoi?

*/1 * * * * bash ~/Documents/test.sh

4
membersound

Pour exécuter toute application associée à une interface graphique à partir de Cron, vous devez exporter quelques variables d'environnement de bureau. La solution ci-dessous est basée sur cette réponse où sont fournis plus de détails.

Comment lancer une application associée à une interface graphique à partir de crontab sous Ubuntu 16.04, 17.10, 18.04 et d’autres distributions Ubuntu avec Gnome

Créez un script de démarrage qui exportera les variables d’environnement de bureau et lancera votre application. Appelons cela gui-launcher. Son contenu devrait être ( référencés: [1] , [2] et [3]):

#!/bin/bash -e

# NAME: gui-launcher

# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done

# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")

# Execute the input command
Nohup "$@" >/dev/null 2>&1 &

exit 0
  • Pour les autres environnements de bureau, modifiez gnome-session dans cette partie $(pgrep gnome-session -n -U $UID) avec le nom du processus du DE utilisé, par exemple mate-session. Une liste de la plupart des Ubuntu DE est présentée ici . Implémentation Lubuntu du même script - ici . Le script peut être utilisé pour lancer une application graphique à partir d'une session TTY ou SSH dans la session de bureau de l'utilisateur actuel.
  • Rendre le fichier exécutable: chmod +x gui-launcher.
  • Le script fonctionnera jusqu'à ce que l'utilisateur soit connecté, y compris un écran verrouillé.
  • S'il vous plaît ne modifiez pas et n'exécutez pas le script en tant que root. Cela pourrait être dangereux pour le système!

Puis utilisez-le dans crontab de cette manière:

*/1 * * * * /full/path/to/gui-launcher "/full/path/to/the-targer-application"

Voici comment cela fonctionne sur Ubuntu 17.10 sur Wayland:

enter image description here


4
pa4080

Environnement pour cron et votre utilisateur régulier peuvent être différents.

Quand vous utilisez des scripts dans cron, il est préférable de leur donner le chemin complet.

1
Anton Shevchuk