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 设置并禁用“登录时启动”
现在您可以重新启动计算机并进行测试。