web-dev-qa-db-ja.com

クラッシュ後にドッキーを自動的に再起動するにはどうすればよいですか?

ドッキーは時々クラッシュします。クラッシュ後に自動的に再起動するにはどうすればよいですか?

9
Paul Woitaschek

まず、ドッキーを使用していません。しかし、$ PATHにdockyが含まれていると仮定しています。そうでない場合は、バイナリへのフルパスを指定します。

Bashの素晴らしい使い方は次のとおりです。

(必要に応じて、geditの代わりにvim)などのファイルから始めます。

  • gedit ~/process_monitor.sh
  • 次を入力します。

    #!/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
    
  • ファイルを保存します。

  • 許可を設定します。

    chmod a+x ~/process_monitor.sh
    

これで、次のようなプログラムを実行できます。

~/process_monitor.sh docky

プログラムを1回起動します。プログラムを終了するか、クラッシュすることを選択した場合は、必ずプログラムを再起動してください。

ログインするとプログラムが起動し、終了するまで停止しないように、システムスタートアップにエントリを追加するには、次の操作を行います。

  • Unity Dashに移動し、「Startup Applications」を入力して探します
  • 追加をクリックします
  • 名前:Dockyまたは好きなもの
  • コマンド:/bin/bash ~/process_monitor.sh docky
  • コメント:好きなものは何でも

新しいエントリがチェックされていることを確認してください。ログアウトしてログインし直すと、常にドッキーが表示されます。

10
Neil Huang

これは、untilループを使用するプロセスモニターメソッドに似ていますが、docky専用です。

簡単なスクリプト:

until docky; do
  sleep 1
done

次に、スタートアップアプリケーションからdockyを削除し、次のようなsh [ファイルへのパス]を追加します。

sh /usr/wegsehen/Scripts/docky.sh

1
Clarke

以下の小さな「ラッパー」スクリプトを書きました。ドッキーが生成され、監視されます。スタートアップアプリケーションでドッキーなしでこれを単独で生成します。

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