web-dev-qa-db-fra.com

Comment redémarrer automatiquement docky après un crash?

docky se bloque de temps en temps pour moi. Comment puis-je le faire redémarrer automatiquement après un crash?

9
Paul Woitaschek

Tout d'abord, je n'utilise pas docky. Mais je suppose que docky est dans votre $ PATH. Sinon, spécifiez le chemin d'accès complet au binaire.

Voici l'utilisation géniale de Bash:

Commencez avec un fichier, tel que (vim au lieu de gedit si vous voulez):

  • gedit ~/process_monitor.sh
  • Tapez ce qui suit:

    #!/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
    
  • Enregistrez le fichier.

  • Définir la permission:

    chmod a+x ~/process_monitor.sh
    

Maintenant, vous pouvez exécuter un programme comme ceci:

~/process_monitor.sh docky

et il lancera le programme une fois, et assurez-vous de le redémarrer si vous choisissez de le quitter ou de choisir de planter.

Pour ajouter une entrée au démarrage du système afin qu'il lance le programme une fois que vous êtes connecté et ne s'arrête pas tant que vous n'avez pas quitté, procédez comme suit:

  • Allez dans Unity Dash, tapez et cherchez "Applications de démarrage"
  • Cliquez sur Ajouter
  • Nom: Docky ou ce que tu veux
  • Commande: /bin/bash ~/process_monitor.sh docky
  • Commentaire: comme tu veux

Assurez-vous que la nouvelle entrée est cochée. Reconnectez-vous et entrez et vous voyez docky tout le temps.

10
Neil Huang

Cette procédure est similaire à la méthode de surveillance de processus, utilisant une boucle Until, mais uniquement pour docky.

Script simple:

until docky; do
  sleep 1
done

Ensuite, supprimez docky de vos applications de démarrage et ajoutez simplement sh [chemin d'accès au fichier], tel que:

sh /usr/wegsehen/Scripts/docky.sh

1
Clarke

J'ai écrit un petit script "wrapper" ci-dessous. Il va engendrer docky et le surveiller. Spawn cela seul sans docky dans les applications de démarrage.

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: March 31st, 2016
# Purpose: monitor script that respawns docky if it dies
# Written for: http://askubuntu.com/q/752478/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#

monitor_pid ()
{
  if ps -p $1 > /dev/null ;
  then
    # Docky is there, no-op
    sleep 0.25
    continue
  else
    # Docky is gone,ask user if they want it back
    DOCKY_PID=$(ask_restart)
  fi
}

spawn_docky()
{
  docky &> /dev/null  &
  echo $! # return docky pid
}

ask_restart ()
{
   zenity --question --title="Docky Monitor"\
          --text="Docky has quit, do you want to restart it ?" > /dev/null
   if [ $? -eq 0  ] ;then
        spawn_docky
   else
       kill -SIGTERM $MYPID # exit the script 
   fi        
}

main()
{
  local MYPID=$$
  local DOCKY_PID=$(spawn_docky)
  while true;
  do
     monitor_pid $DOCKY_PID
  done
}

main
0