Answers:
首先,我不使用ocky。但我假设ocky在您的$ 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
它将立即启动该程序,并确保在您选择退出或选择崩溃时重新启动该程序。
要将条目添加到系统启动中,以便在您登录后启动程序,直到退出后才会停止,请执行以下操作:
/bin/bash ~/process_monitor.sh docky
确保已选中新条目。注销并重新登录,您会一直看到对接。
/bin/bash ~/process_monitor.sh 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很好用。
但是只有当我使用Terminal或yakuake时,...当我使用“〜/ process_monitor.sh docky”或“ / bin / bash〜/ process_monitor.shocky”时,我才可以打开新的外壳
但是,如果我转到“启动应用程序”,请单击“添加”,然后按照以下说明进行操作,则在我的计算机启动时什么也不会发生。我仍然必须手动运行该命令。当我把/ home /“用户名” /process_monitor.sh放进去时,它也能工作。
我发现或创建了一个解决方案(尚未发布在某处)以使其自动启动。
代替使用〜/ process_monitor.shocky创建一个新的文本文件:
#!/ bin / bash
〜/ process_monitor.sh码头
做完了
chmod a + x〜/ start.sh
现在,您可以在终端/ yakuake或您喜欢使用的任何程序中运行该程序:
〜/ start.sh
它将启动〜/ process_monitor.sh扩展坞。因此,它将崩溃并在崩溃时重新启动。
您只能为“ process_monitor.sh”和“ start.sh”选择任何名称。.sh很重要。但也请确保在文本文件中也进行更改。
现在转到Dash,键入并打开“启动应用程序”。
现在,您可以重新启动计算机并进行测试。
process_monitor.sh
?无需文件编辑或权限更改。