我使用 Gnome Do 作为大多数应用程序的启动器。我将其设置为在登录时运行,大多数时候它都处于后台等待我按下键盘快捷键。大约每周一次,它就会崩溃。我按下快捷键,但什么也没发生。我不得不重新启动它。
这不是特别烦人,但我想知道是否有任何好方法可以确保桌面应用程序永远运行。如果它们死机了,它们会重新启动(也许会设置崩溃超时,这样如果它在加载时崩溃,它就不会一遍又一遍地尝试运行它)。
我知道有些应用程序会这样做。在 Gnome2 上,如果 gnome-panel 未运行,系统会强制加载它。有没有一种简单的方法可以利用这种逻辑(当然,不会破坏 Gnome)。
我不希望这个问题太具体到 Gnome Do 甚至 Gnome,因为我有多个解决方案应用程序(我在我们的媒体中心的 OpenBox 桌面上运行 Boxee)并且我相信其他人都有他们自己的问题,他们想通过类似这样的方法来解决。
答案1
另一个不太优雅的解决方案:
#!/bin/bash
threshold=2
program="$1"
while true; do
start=$(date +%s)
"$program"
ret_val=$?
stop=$(date +%s)
if [[ ret_val -eq 0 ]]; then
# normal exit, quit
exit 0
else
# abnormal exit, check runtime. if < threshold quit
runtime=$((stop - start))
if [[ runtime -lt $threshold ]]; then
echo "crash on start"
exit 1
fi
fi
done
如果程序(第一个参数)以返回码 != 0 退出并且至少运行了临界点秒。
我尝试使用以下方式创建 Upstart 作业重生和重生限制选项,但不知何故失败了。
答案2
一个简单但不是特别优雅的解决方案是从循环脚本启动应用程序,例如
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
尽管这可能必须针对每个应用程序进行检查,因为 bash 不会暂停所有程序......
您还可以对其进行调整以检查错误代码,这样它只会在应用程序崩溃时重生,而不是关闭。