Як я автоматично перезавантажую доккі після аварії?


9

докі час від часу збоїть для мене. Як я можу зробити так, щоб він перезавантажився автоматично після його аварії?


Можливо, ви зможете адаптувати цей сценарій, розміщений людиною, яка відповіла на подібне запитання щодо

Відповіді:


10

По-перше, я не використовую докі. Але я припускаю, що докі знаходиться у вашій $ 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

і вона запустить програму один раз, і переконайтеся, що перезапустіть програму, якщо ви коли-небудь захочете її вийти або вона вирішить завершити роботу.

Щоб додати запис до запуску системи, щоб він запустив програму після входу в систему і не зупиниться, поки ви не вийдете, зробіть це:

  • Перейдіть до Unity Dash, введіть і шукайте "Запуск програм"
  • Натисніть Додати
  • Ім'я: Докі чи що завгодно
  • Команда: /bin/bash ~/process_monitor.sh docky
  • Коментар: Що б вам не подобалося

Переконайтесь, що новий запис позначено. Вийдіть із системи та увійдіть, і ви постійно бачите докі.


Що робити, якщо я запускаю Gnome 3, і у мене немає "Запуск програм", і я хочу помістити його у .desktop файл? Що б я поставив для рядка "Exec ="?
guttermonk

Зрозумів! :) "Terminal = False" та "Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &"
guttermonk

Дякую! Я також використовую це для Dropbox та Synergy. Чудово працює!
guttermonk

Сценарій працює чудово, коли я запускаю його вручну, але я додав /bin/bash ~/process_monitor.sh dockyдо запуску програм, але нічого не відбувається. Насправді я бачу, як половина вікна терміналу спалахує на екрані на секунду після входу, але це все. Сценарій не починається, навіть якщо я додав цю команду до запуску програм. Що я повинен зробити?
Revetahw каже: Відновити Моніку

@guttermonk Чи можете ви запропонувати будь-яку допомогу щодо мого запиту у коментарі вище? Я також опублікував це як окреме
Revetahw каже

1

Це схоже на метод монітора процесу, використовуючи цикл до, але тільки для самого докі.

Простий сценарій:

until docky; do
  sleep 1
done

Потім видаліть доккі зі своїх програм запуску та просто додайте sh [шлях до файлу], наприклад:

sh /usr/wegsehen/Scripts/docky.sh


0

Я написав нижче невеликий сценарій "обгортки". Він породжить докі і стежить за ним. Помістіть це поодинці без стику у програмах запуску.

#!/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

-1

./Process_monitor.sh чудово працює.

Але тільки якщо я використовую Terminal або yakuake ... тож я можу просто відкрити нову оболонку, коли я використовую "~ / process_monitor.sh docky" або "/ bin / bash ~ / process_monitor.sh docky"

Але якщо я перейду до "Запуск програм", натисніть кнопку "Додати" та дотримуйтесь цих інструкцій, коли мій комп'ютер запускається, нічого не станеться. Мені ще належить запустити цю команду вручну. І це виграло роботу, коли я також помістив /home/"username"/process_monitor.sh docky.

Я знайшов або створив рішення (яке ще не було розміщено десь), щоб його автозапустити.

Замість використання ~ / process_monitor.sh docky створіть новий текстовий файл:

  • gedit ~ / start.sh
  • тип наступний

#! / бін / баш

~ / process_monitor.sh docky

зроблено

  • Зберегти файл
  • Встановити дозвіл:

chmod a + x ~ / start.sh

Тепер ви можете запустити програму у своєму терміналі / yakuake або будь-якому іншому, що ви бажаєте використовувати:

~ / start.sh

і він запустить док ~ ~ process_monitor.sh. Таким чином, він буде запущений і перезапущений у разі збоїв.

Ви можете вибрати будь-яке ім’я, яке вам подобається, лише для "process_monitor.sh" та "start.sh". Але не забудьте змінити це також у своїх текстових файлах.

Тепер перейдіть до своєї тире, наберіть і відкрийте "Запуск програм".

  • Видаліть налаштування запуску Docky
  • Створіть новий
  • Ім'я: Докі або все, що ви хочете назвати
  • Команда: / home / "ваше ім'я користувача" /start.sh (для мене, наприклад, /home/kevin/startup.sh)
  • Коментар: Що б вам не подобалося.
  • Перейдіть до налаштувань Docky і відключіть "Почати при вході"

Тепер ви можете перезапустити комп'ютер і протестувати його.

Відеоурок


Чому б просто не створити (символічне) посилання на process_monitor.sh? Не потрібно редагування файлів або змін дозволу.
Девід Фоерстер

що ти маєш на увазі під символічним посиланням?
Кевін

Це : ln -s process_monitor.sh start.shабоln -s ~/process_monitor.sh ~/Desktop/
Девід Фоерстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.