Como reinicio automaticamente o docky após uma falha?

9

docky trava de vez em quando para mim. Como posso fazê-lo reiniciar automaticamente depois que ele travou?

Paul Woitaschek
fonte
Você pode ser capaz de se adaptar este script postado por alguém que respondeu a uma pergunta semelhante sobre superusuário: superuser.com/questions/223449/auto-restart-process-on-crash

Respostas:

10

Primeiro, eu não estou usando docky. Mas suponho que o docky esteja no seu $ PATH. Caso contrário, especifique o caminho completo para o binário.

Aqui está o incrível uso do Bash:

Comece com um arquivo, como (vim em vez de gedit, se desejar):

  • gedit ~/process_monitor.sh
  • Digite o seguinte:

    #!/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
    
  • Salve o arquivo.

  • Defina a permissão:

    chmod a+x ~/process_monitor.sh
    

Agora você pode executar um programa como este:

~/process_monitor.sh docky

e ele iniciará o programa uma vez e reinicie o programa se você optar por encerrá-lo ou optar por travar.

Para adicionar uma entrada à inicialização do sistema, para que ele inicie o programa após o login e não seja interrompido até você sair, faça o seguinte:

  • Vá para o Unity Dash, digite e procure por "Startup Applications"
  • Clique em Adicionar
  • Nome: Docky ou o que você quiser
  • Comando: /bin/bash ~/process_monitor.sh docky
  • Comentário: O que você quiser

Verifique se a nova entrada está marcada. Faça logoff e logon e você verá docky o tempo todo.

Neil Huang
fonte
E se eu estiver executando o Gnome 3 e não tiver "Aplicativos de Inicialização" e quiser colocá-lo em um arquivo .desktop? O que eu colocaria para a linha "Exec ="?
guttermonk
Entendi! :) "Terminal = False" e "Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &"
guttermonk
Obrigado! Eu também uso isso para Dropbox e Synergy. Funciona bem!
guttermonk
O script funciona de maneira excelente quando eu o executo manualmente, mas adicionei /bin/bash ~/process_monitor.sh dockyaplicativos de inicialização, mas nada acontece. Na verdade, vejo metade da janela de um terminal piscando na tela por um segundo após o login, mas é tudo. O script não entra em ação, mesmo que eu tenha adicionado esse comando aos aplicativos de inicialização. O que devo fazer?
Revetahw diz Reinstate Monica
@guttermonk Você pode oferecer alguma ajuda na minha consulta no comentário acima? Também postei isso como uma pergunta separada: askubuntu.com/questions/751465/…
Revetahw diz Reinstate Monica em
1

Isso é semelhante ao método do monitor de processo, usando um loop até, mas apenas para o próprio docky.

Script simples:

until docky; do
  sleep 1
done

Em seguida, remova o docky dos aplicativos de inicialização e adicione sh [caminho para o arquivo], como:

sh /usr/wegsehen/Scripts/docky.sh

Clarke
fonte
0

Eu escrevi um pequeno script "wrapper" abaixo. Aparecerá docky e o monitorará. Crie isso sozinho, sem docky, nos aplicativos de inicialização.

#!/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
fonte
-1

O ./process_monitor.sh funciona muito bem.

Mas somente se eu usar o Terminal ou yakuake ... para abrir um novo shell, quando usar "~ / process_monitor.sh docky" ou "/ bin / bash ~ / process_monitor.sh docky"

Mas se eu for para "Aplicativos de inicialização", clique em adicionar e siga estas instruções. Nada acontece quando o computador está inicializando. Eu ainda tenho que executar esse comando manualmente. E ganhou trabalho, quando eu coloquei no /home/"username"/process_monitor.sh docky também.

Encontrei ou criei uma solução (que não foi publicada em algum lugar) para iniciá-la automaticamente.

Em vez de usar o docky ~ / process_monitor.sh, crie um novo arquivo de texto:

  • gedit ~ / start.sh
  • digite seguinte

#! / bin / bash

~ / process_monitor.sh docky

feito

  • Salvar Arquivo
  • Definir permissão:

chmod a + x ~ / start.sh

Agora você pode executar o programa em seu terminal / yakuake ou o que você preferir:

~ / start.sh

e iniciará o docky ~ / process_monitor.sh. Portanto, ele será iniciado e reiniciado se travar.

Você pode escolher qualquer nome que desejar para "process_monitor.sh" e "start.sh" apenas .sh é importante. Mas certifique-se de alterá-lo também em seus arquivos de texto.

Agora vá para o seu Dash, digite e abra "Aplicativos de inicialização".

  • Excluir outras configurações de inicialização do Docky
  • Crie um novo
  • Nome: Docky ou o que você quiser nomear
  • Comando: / home / "seu nome de usuário" /start.sh (para mim, por exemplo, /home/kevin/startup.sh)
  • Comentário: O que você quiser.
  • Vá para as configurações do Docky e desative "Iniciar no login"

Agora você pode reiniciar o seu computador e testá-lo.

Vídeo tutorial

Kevin
fonte
Por que não apenas criar um link (simbólico) para process_monitor.sh? Nenhuma edição de arquivo ou alteração de permissão é necessária.
precisa
o que você quer dizer com link simbólico?
Kevin
Isto : ln -s process_monitor.sh start.shouln -s ~/process_monitor.sh ~/Desktop/
David Foerster