dockyは時々クラッシュします。クラッシュ後に自動的に再起動するにはどうすればよいですか?
dockyは時々クラッシュします。クラッシュ後に自動的に再起動するにはどうすればよいですか?
回答:
まず、私はdockyを使用していません。しかし、私はdockyが$ PATHにあると想定しています。そうでない場合は、バイナリの完全パスを指定します。
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回起動します。プログラムの終了を選択した場合、またはプログラムがクラッシュした場合は、必ずプログラムを再起動してください。
システムの起動にエントリを追加して、ログイン後にプログラムを起動し、終了するまで停止しないようにするには、次のようにします。
/bin/bash ~/process_monitor.sh docky
新しいエントリがチェックされていることを確認します。ログアウトしてログインすると、常にdockyが表示されます。
/bin/bash ~/process_monitor.sh docky
適切に機能しますが、スタートアップアプリケーションに追加しましたが、何も起こりません。実際、ログイン後、端末ウィンドウの半分が画面に1秒間点滅しますが、それだけです。起動アプリケーションにそのコマンドを追加しても、スクリプトは起動しません。私は何をすべきか?
以下の小さな「ラッパー」スクリプトを書きました。dockyを生成して監視します。スタートアップアプリケーションでドッキングすることなく、これだけで起動します。
#!/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
./process_monitor.shは適切に機能します。
ただし、ターミナルまたはyakuakeを使用している場合に限り、「〜/ process_monitor.sh docky」または「/ bin / bash〜/ process_monitor.sh docky」を使用すると、新しいシェルを開くことができます。
しかし、[スタートアップアプリケーション]に移動した場合、[追加]をクリックして、これらの指示に従いますが、コンピューターの起動時に何も起こりません。そのコマンドを手動で実行する必要があります。そして、私が/home/"username"/process_monitor.sh dockyに置いたときも、うまくいきました。
自動起動するためのソリューション(どこにも投稿されていない)を見つけた、または作成した。
〜/ process_monitor.sh dockyを使用する代わりに、新しいテキストファイルを作成します:
#!/ bin / bash
〜/ process_monitor.sh docky
終わった
chmod a + x〜/ start.sh
これで、ターミナル/ yakuakeまたは使用したいものでプログラムを実行できます。
〜/ start.sh
〜/ process_monitor.sh dockyを開始します。したがって、クラッシュするとstartetを取得して再起動します。
「process_monitor.sh」および「start.sh」には任意の名前を選択できます。.shのみが重要です。ただし、テキストファイルでも必ず変更してください。
ダッシュに移動し、「スタートアップアプリケーション」を入力して開きます。
これでコンピュータを再起動してテストできます。
process_monitor.sh
ですか?ファイルの編集や権限の変更は必要ありません。