Jak automatycznie ponownie uruchomić docky po awarii?

9

Doki od czasu do czasu ulega awarii. Jak sprawić, by uruchomił się ponownie automatycznie po awarii?

Paul Woitaschek
źródło
Możesz dostosować ten skrypt opublikowany przez osobę, która odpowiedziała na podobne pytanie na stronie superuser: superuser.com/questions/223449/auto-restart-process-on-crash

Odpowiedzi:

10

Po pierwsze, nie używam doków. Ale zakładam, że docky jest w twojej $ PATH. Jeśli nie, podaj pełną ścieżkę do pliku binarnego.

Oto niesamowite wykorzystanie Bash:

Zacznij od pliku, takiego jak (vim zamiast gedit, jeśli chcesz):

  • gedit ~/process_monitor.sh
  • Wpisz następujące polecenie:

    #!/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
    
  • Zapisz plik.

  • Ustaw uprawnienie:

    chmod a+x ~/process_monitor.sh
    

Teraz możesz uruchomić taki program:

~/process_monitor.sh docky

i raz uruchomi program, i upewnij się, że uruchomisz go ponownie, jeśli kiedykolwiek zechcesz go zamknąć lub zawiesi się.

Aby dodać wpis do uruchamiania systemu, aby uruchamiał program po zalogowaniu i nie zatrzyma się, dopóki nie wyjdziesz, wykonaj następujące czynności:

  • Przejdź do Unity Dash, wpisz i wyszukaj „Aplikacje startowe”
  • Kliknij Dodaj
  • Imię: Docky lub cokolwiek chcesz
  • Komenda: /bin/bash ~/process_monitor.sh docky
  • Komentarz: Cokolwiek lubisz

Upewnij się, że nowy wpis jest zaznaczony. Wyloguj się ponownie i zaloguj, a będziesz cały czas widoczny.

Neil Huang
źródło
Co się stanie, jeśli korzystam z Gnome 3 i nie mam „aplikacji startowych” i chcę zamiast tego umieścić go w pliku .desktop? Co bym wstawił dla wiersza „Exec =”?
guttermonk
Rozumiem! :) „Terminal = False” i „Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &”
guttermonk
Dzięki! Używam tego również w Dropbox i Synergy. Działa świetnie!
guttermonk,
Skrypt działa doskonale, gdy uruchamiam go ręcznie, ale dodałem /bin/bash ~/process_monitor.sh dockydo aplikacji startowych, ale nic się nie dzieje. Właściwie widzę pół okna terminala migającego na ekranie przez sekundę po zalogowaniu, ale to wszystko. Skrypt nie uruchamia się, nawet jeśli dodałem to polecenie do aplikacji startowych. Co powinienem zrobić?
Revetahw mówi: Przywróć Monikę
@guttermonk Czy możesz zaoferować pomoc w moim zapytaniu w powyższym komentarzu? Opublikowałem to jako osobne pytanie również: askubuntu.com/questions/751465/…
Revetahw mówi: Przywróć Monikę
1

Jest to podobne do metody monitorowania procesu, wykorzystującej pętlę till, ale tylko dla samego doku.

Prosty skrypt:

until docky; do
  sleep 1
done

Następnie usuń docky z aplikacji startowych i po prostu dodaj sh [ścieżkę do pliku], na przykład:

sh /usr/wegsehen/Scripts/docky.sh

Clarke
źródło
0

Napisałem mały skrypt „otoki” poniżej. Odrodzi się dokujący i monitoruje go. Odradzaj to sam bez dokowania w aplikacjach startowych.

#!/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
źródło
-1

Plik ./process_monitor.sh działa świetnie.

Ale tylko jeśli używam terminala lub yakuake ... więc mogę po prostu otworzyć nową powłokę, gdy używam „~ / process_monitor.sh docky” lub „/ bin / bash ~ / process_monitor.sh docky”

Ale jeśli przejdę do „aplikacji startowych”, kliknij dodaj i postępuj zgodnie z tymi instrukcjami, nic się nie dzieje, gdy mój komputer się uruchamia. Nadal muszę uruchomić to polecenie ręcznie. I zadziałało, gdy wstawiłem także dok /home/"username"/process_monitor.sh.

Znalazłem lub stworzyłem rozwiązanie (które nie zostało gdzieś opublikowane), aby uruchomić je automatycznie.

Zamiast używać dokowanego pliku ~ / process_monitor.sh utwórz nowy plik tekstowy:

  • gedit ~ / start.sh
  • wpisz następujące

#! / bin / bash

~ / process_monitor.sh docky

gotowy

  • Zapisz plik
  • Ustaw uprawnienia:

chmod a + x ~ / start.sh

Teraz możesz uruchomić program na swoim terminalu / yakuake lub cokolwiek, czego wolisz:

~ / start.sh

i uruchomi dokowanie ~ / process_monitor.sh. Więc uruchomi się i uruchomi ponownie, jeśli ulegnie awarii.

Możesz wybrać dowolną nazwę dla „process_monitor.sh” i „start.sh” tylko .sh jest ważne. Ale pamiętaj, aby to zmienić również w plikach tekstowych.

Teraz przejdź do Dash, wpisz i otwórz „Aplikacje startowe”.

  • Usuń inne ustawienia Docky Startup
  • Utwórz nowy
  • Nazwa: Docky lub jakkolwiek chcesz go nazwać
  • Polecenie: / home / „twoja nazwa użytkownika” /start.sh (dla mnie np. /Home/kevin/startup.sh)
  • Komentarz: Cokolwiek lubisz.
  • Przejdź do ustawień Docky i wyłącz „Rozpocznij przy logowaniu”

Teraz możesz ponownie uruchomić komputer i przetestować go.

Film instruktażowy

Kevin
źródło
Dlaczego nie po prostu utworzyć (symboliczny) link do process_monitor.sh? Nie wymaga edycji pliku ani zmian uprawnień.
David Foerster,
co masz na myśli przez link symboliczny?
Kevin
This : ln -s process_monitor.sh start.shorln -s ~/process_monitor.sh ~/Desktop/
David Foerster