web-dev-qa-db-fra.com

Pourquoi ce script ne s'exécute-t-il pas au démarrage?

Ce script fonctionne parfaitement lorsque je le lance manuellement. Comment puis-je le faire fonctionner au démarrage? La fonction du script est d'obtenir que Docky soit automatiquement relancé en cas de blocage.

J'ai créé le script comme ceci:

  • gedit ~/process_monitor.sh

Collé dans ce qui suit ( trouvé sur Ask Ubunt ):

#!/bin/bash

if [[ -z "$1" ]];then
    echo "ERROR: must specify program"
    exit 1
fi

while (( 0 == 0 ));do
    $@ &
    pid=`jobs -l | awk '{print $2}'`
    wait $pid
done
  • Enregistré le fichier.

  • Définir la permission:

    chmod a+x ~/process_monitor.sh
    

Maintenant, quand je le lance comme ça, ça marche parfaitement:

~/process_monitor.sh docky

Cependant, lorsque j'ajoute ce qui suit aux applications de démarrage, le script ne se lance pas au démarrage. Eh bien, peut-être que si, mais le script ne fonctionne pas.

/bin/bash ~/process_monitor.sh docky

enter image description here

En gros, il y a une sorte d’élément graphique qui clignote à l’écran pendant une demi-seconde, mais aucun autre signe du script n’est visible, et Docky ne se relance pas s’il est tué.

Comment faire ce travail? Je suis sûr que c'est extrêmement basique.

Je suis sur Ubuntu 14.04.

5
Revetahw

Utilisation de chemins dans un fichier .desktop

Le problème est que les applications de démarrage créent un fichier .desktop dans ~/.config/autostart

Dans un fichier .desktop, vous ne pouvez pas utiliser de chemins relatifs ou variables tels que ~. Utilisez des chemins absolus à la place:

/bin/bash /absolute/path/to/process_monitor.sh docky
10
Jacob Vlijm

C'est une meilleure approche

lancez crontab -e insérez cette ligne en bas

*/2 * * * * if [ ! `pgrep docky` ] ; then /usr/bin/docky; fi

vérifie si la commande /usr/bin/docky démarre dans la station d'accueil, c'est tout. Cela vérifiera si docky est exécuté toutes les 2 minutes, sinon il démarrera docky.

0
MRX