J'ai un script .sh qui télécharge une photo du serveur satellite japonais et la définit comme image d'arrière-plan. Je l'ai mis dans la liste de démarrage, mais comment puis-je l'exécuter toutes les 5 minutes, automatiquement?
Si vous voulez une solution de facilité, sans avoir à chercher quelle variable d'environnement définir:
Ajoutez les éléments suivants aux applications de démarrage:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Si vous exécutez le script à partir de votre propre environnement (par exemple, à partir d’une fenêtre de terminal ou d’applications de démarrage), un certain nombre de variables d’environnement seront définies. cron
cependant exécute votre script avec un ensemble limité de variables d’environnement.
Étant donné que votre script utilise sans doute la commande gsettings
name__:
gsettings get org.gnome.desktop.background picture-uri <wallpaper>
pour définir le papier peint, il est presque certain que la commande sera interrompue lors de l'exécution de cron
name__.
L'inconvénient de "la solution paresseuse" est purement théorique. Une commande qui dort pratiquement continuellement ne signifie rien pour votre système.
Reading this post , et d’expériences antérieures, je suis presque certain que la variable d’environnement DBUS_SESSION_BUS_ADDRESS
doit être définie.
Pour ce faire, ajoutez la section suivante au début de votre script (sous le Shebang):
PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
Vous devriez alors pouvoir l'exécuter avec succès à partir de cron
name__.
Vous pourriez cependant très bien sauver la cohue, et choisissez l'option paresseux.
Mettez-le dans votre crontab
.
Ouvrez votre table cron
en:
crontab -e
Maintenant, ajoutez:
*/5 * * * * /path/to/script.sh
N'oubliez pas de rendre le script exécutable à l'avance.
Comme votre script dépend de X, il serait probablement judicieux d’ajouter le DISPLAY
à l’environnement du script:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Remplacez :0
par votre DISPLAY
(peut être trouvé par echo $DISPLAY
à partir de la session interactive).
Si nécessaire, vous pouvez également ajouter la variable d'environnement XAUTHORITY
:
*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Encore une fois, vous pouvez trouver la valeur par echo $XAUTHORITY
.