1

Рябята  подскажите!
Debian 5
Есть бинарнык допустим test в директори bin
Запуск его происходит /bin/test -b
В топе имя процеса для примера test

Задача каждые 2 секунды отслеживать активный ли процесс. Если нет его автоматом запускать..

2

Проверить наличие процесса можно

ps -A | grep test
Да, у меня Ubuntu.
Нет, не глючит.

3 (03.07.2012 21:58:58 отредактировано vini111)

А отслежывать автоматом каждые 2 секунды и в сучаи падения запускать  просто нада чтобы ето все дело на автомате было

4

#!/bin/bash
while [ 1 ]
do
    /bin/test -b
done

5

neol, если я не ошибаюсь, предложенный вами скрипт будет просто безостановочно запускать процесс /bin/test -b, даже если он уже запущен.

Был, был и весь вышел...

6

Lupo Alberto пишет:

neol, если я не ошибаюсь, предложенный вами скрипт будет просто безостановочно запускать процесс /bin/test -b, даже если он уже запущен.

Если это не демон, то не будет. Да и демоны обычно имеют в арсенале ключи, позволяющие запускать их не как фоновый процесс. Надо было сразу уточнить.

7

neol, а можете расказать, почему и как работает этот гениальный скрипт для нубов в bash-скриптиге?

Debian Sid Xmonad

8

Тогда уж

#!/bin/bash
while true; do
          if [ pidof test ] then sleep 2;
          else test -b;
          fi;
done

Я, конечно, в скриптинге не силен, но думаю, что как-то так. Проверить сейчас не могу, я с телефона.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

9 (04.07.2012 02:24:09 отредактировано neol)

SoaT пишет:

neol, а можете расказать, почему и как работает этот гениальный скрипт для нубов в bash-скриптиге?

Баш выполняет команды последовательно и если не отправлять запущенную софтину в фон ( test -b & ), то следующая итерация бесконечного цикла начнется только после завершения ( или падения ) запущенной софтины.

PS Меня трижды из пед университета выгоняли, так что педагогическими талантами явно не блещу (: Если что-то непонятно, спрашивайте.

yars пишет:

Тогда уж

#!/bin/bash
while true; do
          if [ pidof test ] then sleep 2;
          else test -b;
          fi;
done

Я, конечно, в скриптинге не силен, но думаю, что как-то так. Проверить сейчас не могу, я с телефона.

Да, так лучше, только с ";" напутали чуть-чуть. Если я сам не запутался, то рабочий вариант будет:

while true; do
    if [ "`pidof test`" ] ; then sleep 2
        else; test -b
    fi
done

А еще лучше

while true
do
    if [ "`pidof test`" ] 
    then
        sleep 2
    else
        test -b
    fi
done

Легче прочитать и понять, ИМХО.

Конструкция [ "`pidof test`" ]  сгорожена потому что:
`pidof test` - вернет результат выполнения команды, а без кавычек ругнется
"`pidof test`" - интерпретирует этот результат как строку (иначе будет ругань при возвращении нескольких пидов)

10 (04.07.2012 02:44:53 отредактировано SoaT)

neol, только сейчас понял про "отправлять в фон". Всё действительно просто, спасиб что разьяснили)

Debian Sid Xmonad