如何在崩溃后自动重新启动 docky?

如何在崩溃后自动重新启动 docky?

docky 有时会崩溃。如何让它在崩溃后自动重新启动?

答案1

首先,我没有使用 docky。但我假设 docky 在您的 $PATH 中。如果不在,则指定二进制文件的完整路径。

以下是 Bash 的精彩用法:

从一个文件开始,例如(如果您愿意,可以使用 vim 而不是 gedit):

  • 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

它会启动一次程序,如果您选择退出或程序崩溃,请务必重新启动该程序。

要将条目添加到系统启动中,以便它在您登录后启动程序并且在您退出之前不会停止,请执行以下操作:

  • 转到 Unity Dash,输入并查找“启动应用程序”
  • 单击“添加”
  • 名字:Docky 或任何你喜欢的名字
  • 命令:/bin/bash ~/process_monitor.sh docky
  • 评论:随便你

确保新条目已被选中。退出并重新登录,您会一直看到 docky。

答案2

这与进程监视器方法类似,使用直到循环,但仅适用于 docky 本身。

简单脚本:

until docky; do
  sleep 1
done

然后,从启动应用程序中删除 docky,并添加 sh [文件路径],例如:

sh /usr/wegsehen/Scripts/docky.sh

答案3

我在下面编写了一个小“包装器”脚本。它将生成 docky 并对其进行监控。在启动应用程序中单独生成此脚本,而无需 docky。

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

答案4

./process_monitor.sh 运行良好。

但只有当我使用终端或 yakuake 时...我才能打开一个新 shell,当我使用“~/process_monitor.sh docky”或“/bin/bash ~/process_monitor.sh docky”时

但是,如果我转到“启动应用程序”,单击“添加”并按照这些说明操作,则在计算机启动时不会发生任何事情。我仍然必须手动运行该命令。当我输入 /home/“用户名”/process_monitor.sh docky 时,它也无法正常工作。

我找到或创建了一个解决方案(尚未发布在某处)以使其自动启动。

不要使用 ~/process_monitor.sh docky,而是创建一个新的文本文件:

  • gedit ~/start.sh
  • 类型跟随

/bin/bash #!/bin/bash

〜/ process_monitor.sh docky

完毕

  • 保存存档
  • 设置权限:

chmod a + x〜/start.sh

现在您可以在终端/yakuake 或任何您喜欢的终端中运行该程序:

〜/启动.sh

它将启动 ~/process_monitor.sh docky。因此,如果崩溃,它将启动并重新启动。

您可以为“process_monitor.sh”和“start.sh”选择任何您喜欢的名称,只有 .sh 很重要。但请确保在您的文本文件中也更改它。

现在转到您的 Dash,输入并打开“启动应用程序”。

  • 删除其他 Docky 启动设置
  • 创建新的
  • 名字:Docky 或任何你想叫的名字
  • 命令:/home/“你的用户名”/start.sh(对我来说例如/home/kevin/startup.sh)
  • 评论:随你喜欢。
  • 转到 Docky 设置并禁用“登录时启动”

现在您可以重新启动计算机并进行测试。

视频教程

相关内容