Как сохранить графическое приложение, даже если оно сработает?

Я использую Gnome Do в качестве запуска для большинства вещей. У меня он настроен на запуск при входе в систему и большую часть времени он сидит в фоновом режиме, ожидая, когда я выплюнет ярлык на клавиатуре. Примерно раз в неделю он падает. Я размял свой ярлык, и ничего не происходит. Мне нужно перезапустить его.

Это не удивительно раздражает, но я хотел бы знать, есть ли какие-либо хорошие способы, чтобы настольные приложения продолжали работать навсегда. Если они умирают, они снова запускаются (возможно, с тайм-аутом краха, поэтому, если он падает при загрузке, он не пытается запускать его снова и снова).

Я знаю некоторые приложения сделай это. В Gnome2, если gnome-panel не работает, система заставляет его загружаться. Есть ли простой способ использовать эту логику (конечно, не нарушая Gnome).

Я не хочу, чтобы этот вопрос был слишком специфичным для Gnome Do или даже Gnome, потому что у меня есть несколько приложений для решения (я запускаю Boxee на рабочем столе OpenBox в нашем медиацентре), и я уверен, что у других людей есть свои проблемы, которые они хотели бы исправить через что-то вроде этого.

4
задан 6 June 2011 в 16:20

16 ответов

еще одна не очень элегантное решение:

#!/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 и побежал по крайней мере порог секунд.

я пытался создать выскочка задания с помощью [уставка Д2] и респаун ограничить варианты, но это как-то не удалось.

2
ответ дан 25 July 2018 в 21:46
  • 1
    Я думаю, что это немного сложнее, чтобы добавить правильный $ОТОБРАЖАЕМОЕ значение выскочки работу... – JanC 6 June 2011 в 21:55
  • 2
    На самом деле, это должно быть возможно, если вы всегда начинаете работу изнутри х, и пройти $дисплей в качестве параметра. – JanC 6 June 2011 в 21:56
  • 3
    @Янц блаж я попробовал и мне не удалось. ;-) – htorque 7 June 2011 в 02:30

Еще одно не очень элегантное решение:

#!/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
ответ дан 26 July 2018 в 15:53

Еще одно не очень элегантное решение:

#!/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
ответ дан 26 July 2018 в 16:43

еще одна не очень элегантное решение:

#!/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 и побежал по крайней мере порог секунд.

я пытался создать выскочка задания с помощью [уставка Д2] и респаун ограничить варианты, но это как-то не удалось.

2
ответ дан 2 August 2018 в 03:22

еще одна не очень элегантное решение:

#!/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 и побежал по крайней мере порог секунд.

я пытался создать выскочка задания с помощью [уставка Д2] и респаун ограничить варианты, но это как-то не удалось.

2
ответ дан 4 August 2018 в 19:20

еще одна не очень элегантное решение:

#!/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 и побежал по крайней мере порог секунд.

я пытался создать выскочка задания с помощью [уставка Д2] и респаун ограничить варианты, но это как-то не удалось.

2
ответ дан 6 August 2018 в 03:32

Еще одно не очень элегантное решение:

  #! / bin / bash threshold = 2 program = "$ 1" while true;  do start = $ (date +% s) "$ program" ret_val = $?  stop = $ (date +% s), если [[ret_val -eq 0]];  затем # normal exit, quit exit 0 else # аномальный выход, проверьте время выполнения.  если & lt;  порог quit runtime = $ ((stop-start)), если [[runtime -lt $ threshold]];  затем echo «crash on start» exit 1 fi fi done  

Это перезапустится, если программа (первый аргумент) выходит с кодом возврата! = 0 и работает как минимум порог секунд.

Я попытался создать задание Upstart, используя опции respawn и respawn limit , но это как-то не удалось.

2
ответ дан 7 August 2018 в 21:20

Еще одно не очень элегантное решение:

  #! / bin / bash threshold = 2 program = "$ 1" while true;  do start = $ (date +% s) "$ program" ret_val = $?  stop = $ (date +% s), если [[ret_val -eq 0]];  затем # normal exit, quit exit 0 else # аномальный выход, проверьте время выполнения.  если & lt;  порог quit runtime = $ ((stop-start)), если [[runtime -lt $ threshold]];  затем echo «crash on start» exit 1 fi fi done  

Это перезапустится, если программа (первый аргумент) выходит с кодом возврата! = 0 и работает как минимум порог секунд.

Я попытался создать задание Upstart, используя опции respawn и respawn limit , но это как-то не удалось.

2
ответ дан 13 August 2018 в 15:49
  • 1
    Я думаю, немного сложно добавить правильное значение $ DISPLAY к стартовой задаче ... – JanC 6 June 2011 в 21:55
  • 2
    На самом деле, это должно быть возможно, если вы всегда начинаете работу изнутри X и передаете $ DISPLAY в качестве параметра. – JanC 6 June 2011 в 21:56
  • 3
    @JanC Я пробовал, и я потерпел неудачу. ;-) – htorque 7 June 2011 в 02:30

простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...

Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.

0
ответ дан 25 July 2018 в 21:46

простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...

Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.

0
ответ дан 26 July 2018 в 15:53

Простым, если не особенно элегантным решением, было бы запустить приложение из сценария в цикле, так что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

Хотя это может потребоваться проверить для каждого приложения, так как bash не остановка для всех программ ...

Вы также можете адаптировать ее для проверки кодов ошибок, так что она только возрождается, если приложение сработает, а не закрыто.

0
ответ дан 26 July 2018 в 16:43

Простым, если не особенно элегантным решением, было бы запустить приложение из сценария в цикле, так что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

Хотя это может потребоваться проверить для каждого приложения, так как bash не остановка для всех программ ...

Вы также можете адаптировать ее для проверки кодов ошибок, так что она только возрождается, если приложение сработает, а не закрыто.

0
ответ дан 2 August 2018 в 03:22

простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...

Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.

0
ответ дан 4 August 2018 в 19:20

простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что

#!/bin/bash while true do gnome-do # or application of choice sleep 10 # prevent super-spawn rates done

, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...

Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.

0
ответ дан 6 August 2018 в 03:32

Простым, если не особенно элегантным, решением было бы запустить приложение из цикла сценария, например,

  #! / bin / bash, а true do gnome-do # или  применение выбора сна 10 # предотвращает скорость супер-спауна  

Хотя это может потребоваться проверить для каждого приложения, так как bash не останавливается для всех программ ...

Вы также можете приспособить его для проверки кодов ошибок, поэтому он возвращается только в случае сбоя приложения, а не закрытия.

0
ответ дан 7 August 2018 в 21:20

Простым, если не особенно элегантным, решением было бы запустить приложение из цикла сценария, например,

  #! / bin / bash, а true do gnome-do # или  применение выбора сна 10 # предотвращает скорость супер-спауна  

Хотя это может потребоваться проверить для каждого приложения, так как bash не останавливается для всех программ ...

Вы также можете приспособить его для проверки кодов ошибок, поэтому он возвращается только в случае сбоя приложения, а не закрытия.

0
ответ дан 13 August 2018 в 15:49

Другие вопросы по тегам:

Похожие вопросы: