Wie starte ich Docky nach einem Absturz automatisch neu?

9

Docky stürzt von Zeit zu Zeit für mich ab. Wie kann ich es nach einem Absturz automatisch neu starten lassen?

Paul Woitaschek
quelle
Sie können dieses Skript von jemandem geschrieben anpassen können , die eine ähnliche Frage auf Super - User beantwortet: superuser.com/questions/223449/auto-restart-process-on-crash

Antworten:

10

Zunächst einmal benutze ich Docky nicht. Aber ich gehe davon aus, dass Docky in Ihrem $ PATH ist. Wenn nicht, geben Sie den vollständigen Pfad zur Binärdatei an.

Hier ist die großartige Verwendung von Bash:

Beginnen Sie mit einer Datei wie (vim anstelle von gedit, wenn Sie möchten):

  • gedit ~/process_monitor.sh
  • Geben Sie Folgendes ein:

    #!/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
    
  • Speicher die Datei.

  • Legen Sie die Berechtigung fest:

    chmod a+x ~/process_monitor.sh
    

Jetzt können Sie ein Programm wie folgt ausführen:

~/process_monitor.sh docky

Das Programm wird einmal gestartet, und Sie müssen das Programm neu starten, wenn Sie es jemals beenden oder abstürzen möchten.

Gehen Sie folgendermaßen vor, um dem Systemstart einen Eintrag hinzuzufügen, damit das Programm nach dem Anmelden gestartet wird und erst nach dem Beenden angehalten wird:

  • Gehen Sie zu Unity Dash, geben Sie "Startup Applications" ein und suchen Sie nach "Startup Applications".
  • Klicken Sie auf Hinzufügen
  • Name: Docky oder was auch immer Sie mögen
  • Befehl: /bin/bash ~/process_monitor.sh docky
  • Kommentar: Was auch immer du magst

Stellen Sie sicher, dass der neue Eintrag aktiviert ist. Melden Sie sich wieder ab und an und Sie sehen die ganze Zeit Docky.

Neil Huang
quelle
Was ist, wenn ich Gnome 3 ausführe und keine "Startanwendungen" habe und es stattdessen in eine .desktop-Datei einfügen möchte? Was würde ich für die Zeile "Exec =" setzen?
Guttermonk
Verstanden! :) "Terminal = False" und "Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &"
guttermonk
Vielen Dank! Ich benutze dies auch für Dropbox und Synergy. Funktioniert super!
Guttermonk
Das Skript funktioniert hervorragend, wenn ich es manuell ausführe, aber ich habe /bin/bash ~/process_monitor.sh dockyStartanwendungen hinzugefügt , aber es passiert nichts. Eigentlich sehe ich nach dem Anmelden für eine Sekunde ein halbes Terminalfenster auf dem Bildschirm blinken, aber das ist alles. Das Skript wird nicht aktiviert, selbst wenn ich diesen Befehl zu den Startanwendungen hinzugefügt habe. Was sollte ich tun?
Revetahw sagt Reinstate Monica
@guttermonk Kannst du mir im obigen Kommentar Hilfe zu meiner Frage anbieten? Ich habe dies auch als separate
Revetahw sagt Reinstate Monica
1

Dies ähnelt der Prozessüberwachungsmethode, bei der eine till-Schleife verwendet wird, jedoch nur zum Andocken.

Einfaches Skript:

until docky; do
  sleep 1
done

Entfernen Sie dann Docky aus Ihren Startanwendungen und fügen Sie einfach sh [Pfad zur Datei] hinzu, z.

sh /usr/wegsehen/Scripts/docky.sh

Clarke
quelle
0

Ich habe unten ein kleines "Wrapper" -Skript geschrieben. Es wird Docky erscheinen und es überwachen. Spawn dies alleine ohne Docky in den Startup Applications.

#!/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
Sergiy Kolodyazhnyy
quelle
-1

Die ./process_monitor.sh funktioniert hervorragend.

Aber nur, wenn ich Terminal oder Yakuake benutze ... also kann ich einfach eine neue Shell öffnen, wenn ich "~ / process_monitor.sh docky" oder "/ bin / bash ~ / process_monitor.sh docky" verwende.

Wenn ich jedoch zu "Startanwendungen" gehe, klicken Sie auf "Hinzufügen" und befolgen Sie diese Anweisungen. Beim Starten meines Computers geschieht nichts. Ich muss diesen Befehl noch manuell ausführen. Und es hat Arbeit gewonnen, als ich /home/"username"/process_monitor.sh Docky auch eingegeben habe.

Ich habe eine Lösung gefunden oder erstellt (die nicht irgendwo veröffentlicht wurde), um sie automatisch zu starten.

Anstatt das Docky ~ / process_monitor.sh zu verwenden, erstellen Sie eine neue Textdatei:

  • gedit ~ / start.sh
  • Geben Sie Folgendes ein

#! / bin / bash

~ / process_monitor.sh Docky

getan

  • Datei speichern
  • Berechtigung festlegen:

chmod a + x ~ / start.sh

Jetzt können Sie das Programm in Ihrem Terminal / Yakuake ausführen oder was auch immer Sie bevorzugen:

~ / start.sh

und es wird die Docky-Datei ~ / process_monitor.sh gestartet. Es wird also gestartet und neu gestartet, wenn es abstürzt.

Sie können einen beliebigen Namen für "process_monitor.sh" und "start.sh" auswählen. Nur .sh ist wichtig. Aber stellen Sie sicher, dass Sie es auch in Ihren Textdateien ändern.

Gehen Sie nun zu Ihrem Dash, geben Sie "Startup Applications" ein und öffnen Sie es.

  • Löschen Sie die festgelegten Docky-Starteinstellungen
  • Erstellen Sie eine neue
  • Name: Docky oder wie auch immer Sie es benennen möchten
  • Befehl: / home / "Ihr Benutzername" /start.sh (für mich zum Beispiel /home/kevin/startup.sh)
  • Kommentar: Was auch immer du magst.
  • Gehen Sie zu Ihren Docky-Einstellungen und deaktivieren Sie "Bei Anmeldung starten".

Jetzt können Sie Ihren Computer neu starten und testen.

Videoanleitung

Kevin
quelle
Warum nicht einfach einen (symbolischen) Link zu erstellen process_monitor.sh? Keine Dateibearbeitung oder Berechtigungsänderungen erforderlich.
David Foerster
Was meinst du mit symbolischer Verknüpfung?
Kevin
Dies : ln -s process_monitor.sh start.shoderln -s ~/process_monitor.sh ~/Desktop/
David Foerster