Bir kazadan sonra docky'yi otomatik olarak nasıl yeniden başlatırım?


Yanıtlar:


10

Öncelikle, docky kullanmıyorum. Ama docky'nin $ PATH'nızda olduğunu varsayıyorum. Değilse, ikilinin tam yolunu belirtin.

İşte Bash'in harika kullanımı:

(İsterseniz gedit yerine vim) gibi bir dosya ile başlayın:

  • gedit ~/process_monitor.sh
  • Aşağıdakileri yazın:

    #!/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
    
  • Dosya 'yı kaydet.

  • İzni ayarlayın:

    chmod a+x ~/process_monitor.sh
    

Şimdi şöyle bir program çalıştırabilirsiniz:

~/process_monitor.sh docky

programı bir kez başlatır ve programdan çıkmayı seçerseniz veya çökmeyi seçerseniz programı yeniden başlattığınızdan emin olun.

Sistem başlangıcına giriş yaptıktan sonra programı başlatacak ve siz çıkıncaya kadar durmayacak şekilde bir girdi eklemek için şunu yapın:

  • Unity Dash'e gidin, "Başlangıç ​​Uygulamaları" yazın ve arayın
  • Ekle'yi tıklayın
  • Adı: Docky veya ne istersen
  • Komut: /bin/bash ~/process_monitor.sh docky
  • Yorum: Ne istersen

Yeni girişin işaretli olduğundan emin olun. Oturumu kapatıp tekrar açın ve her zaman dok gibi görünün.


Gnome 3 çalıştırıyorum ve "Başlangıç ​​Uygulamaları "m yoksa ve bunun yerine bir .desktop dosyasına koymak istersem ne olur? "Exec =" satırı için ne koyardım?
Guttermonk

Anladım! :) "Terminal = False" ve "Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &"
Guttermonk

Teşekkürler! Bunu Dropbox ve Synergy için de kullanıyorum. Harika çalışıyor!
Guttermonk

Komut dosyası el ile çalıştırdığımda mükemmel çalışıyor, ancak /bin/bash ~/process_monitor.sh dockybaşlangıç ​​uygulamalarına ekledim , ancak hiçbir şey olmuyor. Aslında giriş yaptıktan sonra bir saniye boyunca ekranda bir terminal penceresinin yanıp söndüğünü görüyorum, ama hepsi bu. Komutu başlangıç ​​uygulamalarına eklesem bile komut dosyası devreye girmez. Ne yapmalıyım?
Revetahw, Reinstate Monica'ya

@guttermonk Yukarıdaki yorumda sorgum hakkında yardım sunabilir misiniz? Bunu ayrı bir soru olarak da gönderdim: askubuntu.com/questions/751465/…
Revetahw, Reinstate Monica

1

Bu, bir until döngüsü kullanan işlem izleme yöntemine benzer, ancak yalnızca docky'nin kendisi için.

Basit komut dosyası:

until docky; do
  sleep 1
done

Ardından, docky'yi başlangıç ​​uygulamalarınızdan kaldırın ve yalnızca sh [dosya yolu] ekleyin, örneğin:

sh /usr/wegsehen/Scripts/docky.sh


0

Ben küçük bir "sarmalayıcı" senaryo yazdım. Docky'yi doğuracak ve izleyecek. Başlangıç ​​Uygulamalarında kenetlenme olmadan bunu tek başına ortaya çıkarın.

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# 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

-1

./Process_monitor.sh harika çalışıyor.

Ama sadece Terminal veya yakuake kullanırsam ... "~ / process_monitor.sh docky" veya "/ bin / bash ~ / process_monitor.sh docky" kullandığımda yeni bir kabuk açabilirim.

Ancak "Başlangıç ​​Uygulamaları" na gidersem ekle'yi tıklayın ve bu talimatları izleyin Bilgisayarım başlatıldığında hiçbir şey olmuyor. Hala bu komutu manuel olarak çalıştırmam gerekiyor. Ve /home/"username"/process_monitor.sh docky'yi de koyduğumda iş kazandı.

Otomatik başlatma için bir çözüm buldum (veya bir yere gönderilmemiş).

~ / Process_monitor.sh docky yerine yeni bir textfile oluşturun:

  • gedit ~ / start.sh
  • takip et

#! / Bin / bash

~ / process_monitor.sh docky

tamam

  • Dosyayı kaydet
  • İzin ayarla:

chmod a + x ~ / start.sh

Şimdi programı terminalinizde / yakuake veya istediğiniz herhangi bir yerde çalıştırabilirsiniz:

~ / Start.sh

ve ~ / process_monitor.sh havuzunu başlatacaktır. Böylece çökme durumunda başlangıç ​​ve yeniden başlatılır.

Sadece "process_monitor.sh" ve "start.sh" için istediğiniz herhangi bir ismi seçebilirsiniz .sh önemlidir. Ancak metin dosyalarınızda da değiştirdiğinizden emin olun.

Şimdi Dash'inize gidin, yazın ve "Başlangıç ​​Uygulamaları" nı açın.

  • Set Docky Startup ayarlarını sil
  • Yeni bir tane oluşturun
  • Adı: Docky veya ne adlandırmak isterseniz
  • Komut: / home / "kullanıcı adınız" /start.sh (benim için örneğin /home/kevin/startup.sh)
  • Yorum: Ne istersen.
  • Docky ayarlarınıza gidin ve "Oturum açmaya başlayın" özelliğini devre dışı bırakın

Şimdi Bilgisayarınızı yeniden başlatabilir ve test edebilirsiniz.

Video öğretici


Neden sadece (sembolik) bir bağlantı oluşturmuyorsunuz process_monitor.sh? Dosya düzenleme veya izin değişikliği gerekmez.
David Foerster

sembolik bağlantı ile ne demek istiyorsun?
Kevin

Bu : ln -s process_monitor.sh start.shveyaln -s ~/process_monitor.sh ~/Desktop/
David Foerster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.