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