web-dev-qa-db-fra.com

Lancer .sh toutes les 5 minutes

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?

11
Aleksander Mahnyov

L'option paresseux

Si vous voulez une solution de facilité, sans avoir à chercher quelle variable d'environnement définir:

  • Assurez-vous que votre script comprend le Shebang
  • Le rendre exécutable
  • 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"
    

Explication

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. croncependant exécute votre script avec un ensemble limité de variables d’environnement.
Étant donné que votre script utilise sans doute la commande gsettingsname__:

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 cronname__.

L'inconvénient de "la solution paresseuse" est purement théorique. Une commande qui dort pratiquement continuellement ne signifie rien pour votre système.

Information additionnelle; alternativement

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 cronname__.

Vous pourriez cependant très bien sauver la cohue, et choisissez l'option paresseux.

14
Jacob Vlijm

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.

23
heemayl