Я использую Gnome Do в качестве запуска для большинства вещей. У меня он настроен на запуск при входе в систему и большую часть времени он сидит в фоновом режиме, ожидая, когда я выплюнет ярлык на клавиатуре. Примерно раз в неделю он падает. Я размял свой ярлык, и ничего не происходит. Мне нужно перезапустить его.
Это не удивительно раздражает, но я хотел бы знать, есть ли какие-либо хорошие способы, чтобы настольные приложения продолжали работать навсегда. Если они умирают, они снова запускаются (возможно, с тайм-аутом краха, поэтому, если он падает при загрузке, он не пытается запускать его снова и снова).
Я знаю некоторые приложения сделай это. В Gnome2, если gnome-panel не работает, система заставляет его загружаться. Есть ли простой способ использовать эту логику (конечно, не нарушая Gnome).
Я не хочу, чтобы этот вопрос был слишком специфичным для Gnome Do или даже Gnome, потому что у меня есть несколько приложений для решения (я запускаю Boxee на рабочем столе OpenBox в нашем медиацентре), и я уверен, что у других людей есть свои проблемы, которые они хотели бы исправить через что-то вроде этого.
еще одна не очень элегантное решение:
#!/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] и респаун ограничить варианты, но это как-то не удалось.
Еще одно не очень элегантное решение:
#!/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, используя порог и варианты ограничения респауна, но это как-то не удалось.
Еще одно не очень элегантное решение:
#!/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, используя порог и варианты ограничения респауна, но это как-то не удалось.
еще одна не очень элегантное решение:
#!/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] и респаун ограничить варианты, но это как-то не удалось.
еще одна не очень элегантное решение:
#!/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] и респаун ограничить варианты, но это как-то не удалось.
еще одна не очень элегантное решение:
#!/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] и респаун ограничить варианты, но это как-то не удалось.
Еще одно не очень элегантное решение:
#! / 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 , но это как-то не удалось.
Еще одно не очень элегантное решение:
#! / 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 , но это как-то не удалось.
простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...
Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.
простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...
Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.
Простым, если не особенно элегантным решением, было бы запустить приложение из сценария в цикле, так что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
Хотя это может потребоваться проверить для каждого приложения, так как bash не остановка для всех программ ...
Вы также можете адаптировать ее для проверки кодов ошибок, так что она только возрождается, если приложение сработает, а не закрыто.
Простым, если не особенно элегантным решением, было бы запустить приложение из сценария в цикле, так что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
Хотя это может потребоваться проверить для каждого приложения, так как bash не остановка для всех программ ...
Вы также можете адаптировать ее для проверки кодов ошибок, так что она только возрождается, если приложение сработает, а не закрыто.
простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...
Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.
простой, если не особенно элегантно, решением было бы запустить приложение из скрипта на петли, такие, что
#!/bin/bash
while true
do
gnome-do # or application of choice
sleep 10 # prevent super-spawn rates
done
, хотя это, возможно, придется проверять каждое приложение, как bash не остановить для всех программ...
Вы могли бы также адаптировать его для проверки errorcodes, поэтому он появляется только в случае сбоя приложения, а не закрытые.
Простым, если не особенно элегантным, решением было бы запустить приложение из цикла сценария, например,
#! / bin / bash, а true do gnome-do # или применение выбора сна 10 # предотвращает скорость супер-спауна
Хотя это может потребоваться проверить для каждого приложения, так как bash не останавливается для всех программ ...
Вы также можете приспособить его для проверки кодов ошибок, поэтому он возвращается только в случае сбоя приложения, а не закрытия.
Простым, если не особенно элегантным, решением было бы запустить приложение из цикла сценария, например,
#! / bin / bash, а true do gnome-do # или применение выбора сна 10 # предотвращает скорость супер-спауна
Хотя это может потребоваться проверить для каждого приложения, так как bash не останавливается для всех программ ...
Вы также можете приспособить его для проверки кодов ошибок, поэтому он возвращается только в случае сбоя приложения, а не закрытия.