Strona 1 z 1

Proces badający czy inny proces jest uruchomiony

: 24 lutego 2012, 14:21
autor: sethiel
Czy zna ktoś program albo napisał ktoś taki proces (skrypt), który badałby, czy inny proces jest uruchomiony, a jak nie jest uruchomiony to go załączał?
Mam proces, który wywala się od czasu do czasu w zależności od określonej sytuacji.
Chciałbym aby po wywaleniu odczekał parę chwil i się uruchomił z powrotem.

: 24 lutego 2012, 15:21
autor: LordRuthwen
Znalezione kiedyś, gdzieś w sieci, sprawdza się dobrze:

Kod: Zaznacz cały

#!/bin/bash
NAME=nazwa_procesu
START="service $name start"
NOTIFY=moj@mail
data=`date`
sprawdz=`ps -ef | grep -v grep | grep $NAME | wc -l`
i=`cat /var/log/watch.log`
c=$i
if [ "$sprawdz" == "0" ]; then
((c+=1))
echo $c > /var/log/watch.log
if [ "$c" == "3" ]; then
echo "$data : $NAME nie dziala. Uruchamiam $NAME wysylam powiadomienie." >> /var/log/watchdog.log
echo "$NAME nie dzialal i zostal uruchomiony: $data" | mail -s "TEMAT MAILA" $NOTIFY
echo 0 > /var/log/watch.log
else
echo "$data : $NAME nie dziala. Uruchamiam $NAME." >> /var/log/watchdog.log
fi
$START
fi

exit

: 27 lutego 2012, 12:51
autor: fabix
Jeżeli potrzebujesz uruchomić taki proces w pętli i śledzić jego wynik, to napisałem kiedyś coś takiego. Wykorzystywałem do monitorowania połączeń vpn.
Pokazuje ikonkę w zasobniku, która przedstawiała stan połączenia. Łatwo przerobić do swoich potrzeb.

Kod: Zaznacz cały

#!/bin/bash


#set -x


#Ustawienia skryptu
REGEXP="proces.ovpn"                             #proces którego szukamy
CHECK_TIME=15                                    #czas po którym nastąpi kolejne sprawdzenie stanu procesu
ICON_PATH=/home/user/bin/icons                    #ścieżka do ikon
ICONS=(network-empty.png network-1.png network-2.png network-full.png)        #tablica nazw ikon


exec 3> >(zenity --notification --text "Oczekiwanie na zestawienie połączenia" --window-icon ${ICON_PATH}/${ICONS[0]} --listen)
#Zaleca się choć minimalny odstęp po tym kroku
sleep 45 #ładownie iksów
 
#Wysyła informacje do zenity (2 i 3 parametr obcjonalny)
#$1 - ikona którą należy zaprezentować
#$2 - tekst pod kursorem
#$3 - wiadomość w dymku
function zenity_do()
{
  if [ $# = 1 ]; then
    echo -e "icon: $1" >&3
  elif [ $# = 2 ]; then
    echo -e "icon: $1\ntooltip: $2" >&3
  elif [ $# = 3 ]; then
    echo -e "icon: $1\ntooltip: $2\nmessage: $3" >&3
  fi
}


#Sprząta po wykryciu sygnału
function killed()
{
  exec 3>&-
  exit 0
}


#Wykonuje animację określoną ilość razy (wszystkie parametry obowiązkowe)
#$1 - liczba powtórzeń animacji
#$2 - czas klatki animacji (szybkość animacji, i dłuższy czas tym wolniejsza animacja)
#$3 - odstęp pomiędzy powtórzeniami animacji
function zenity_animation()
{
  x=0
  iter=1
  while [ $iter -le $1 ]
  do
    x=$(( $x + 1 ))
    x=$(( $x % 3 ))
    zenity_do ${ICON_PATH}/${ICONS[x]}


    if [ $x = 0 ]; then
      iter=$(( $iter + 1 ))
      sleep $3
    else
      sleep $2
    fi
  done
}


# Zasadzamy się na sygnały
trap killed SIGTERM #normalne zakończenie
trap killed SIGINT #control + c






#zmienne globalne - nie zmieniać
CONNECTED=false


#Pętla sprawdzająca stan połączenia
while [ true ]; do
    PS_COUNT=`ps aux | grep ${REGEXP} | grep -v grep | wc -l`
    if [ $PS_COUNT = 1 ]; then
      if [ "$CONNECTED" != "true" ]; then
    CONNECTED=true
    text_format=`date +"Połączono: %d.%m - %R"`
    zenity_do ${ICON_PATH}/${ICONS[3]} "${text_format}"
    sleep $CHECK_TIME
      fi
    elif [ $PS_COUNT = 0 ]; then
      echo 
      if [ "$CONNECTED" = "true" ]; then
    CONNECTED=false
    text_format=`date +"Rozłączono: %d.%m - %R"`
    zenity_do ${ICON_PATH}/${ICONS[0]} "${text_format}" "Połączenie zostało zerwane"
    sleep $CHECK_TIME
      else
    zenity_animation 5 0.3 2
      fi
    elif [ $PS_COUNT -gt 1 ]; then
      killed
    fi
done


#set +x

: 28 lutego 2012, 10:21
autor: sethiel
Bardzo dziękuję, posprawdzam i opiszę spostrzeżenia.