Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-09-29 19:54:03

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Limit czasu wykonywania skryptu.

Witam Was, mam sobie skrypt do włączania aplikacji automatycznie gdy się wyłączy - działa.

Jednak jeżeli jest błąd z konfiguracji tej aplikacji to skrypt cały czas próbuje ją uruchomić co objawia się 100% użyciem procesora.

Jak zlimitować czas wykonywania skryptów w bashu?

Pozdrawiam!

Offline

 

#2  2007-09-29 19:58:20

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Limit czasu wykonywania skryptu.

uśpij skrypt za pomocą sleep

PS. a temat czemu nie w programowaniu?


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2007-09-29 22:43:27

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Re: Limit czasu wykonywania skryptu.

A powiedz mi jak odpalić dany skrypt przez sleepa?

Co do działu to ja nie widzę działu programowanie ;)

/Edit - a jest - nie zauważyłem, wybacz ;)

Offline

 

#4  2007-09-29 23:27:28

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Limit czasu wykonywania skryptu.

A powiedz mi jak odpalić dany skrypt przez sleepa?

nie tak
w skrypcie musisz użyć sleepa, np.

Kod:

#!/bin/bash
jeden      # skrypt wykonuje pierwszą komendę
sleep 10   # "zasypia" na dziesięć sekund...
dwa        # ...i potem jedzie dalej

Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#5  2007-10-01 18:45:29

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Re: Limit czasu wykonywania skryptu.

Ale takie rozwiązanie dużo mi nie da ;)

Offline

 

#6  2007-10-01 19:52:50

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Limit czasu wykonywania skryptu.

moznaby wykozystac plik z licznikiem prob
1. zanim probojesz odpalic ponownie sprawdzasz czy istnieje i czas jego modyfikacji
2a) jezeli nie istnieje lub starszy niz 1 minuta tworzysz nowy z wartoscia licznika 0
2b) w przeciwnym razie o zwiekszasz wartosc o 1
3) sprawdzasz czy obecna wartosc licznika prob nie przekroczyla zadanego limitu
4) jezeli tak konczysz skrypt


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2007-10-23 16:12:51

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Re: Limit czasu wykonywania skryptu.

Witam, poczytałem trochę o sleepie i po części da się to zrobić tą komendą ;)

Próbowałem napisać skrypt który sprawdza czy istnieje już uruchomiony taki proces ( jeżeli tak to wyświetla że nie można go zduplikować a jeżeli nie to go uruchamia )


#!/bin/bash
script=`ps ax | grep motion | grep -v staszek | wc -l`
if [ $staszek = 0 ]
then
sleep 3s;/home/staszek/binarka
else
echo "Blokada - Nie można zduplikować procesu"
fi

Co tu jest nie tak ( dlaczego raz działa a raz nie? )

P.S

if [ $script = 0 ] <<< Za co odpowiada to ta liczba? W tym wypadku 0?

Pozdrawiam!

Offline

 

#8  2007-10-24 16:16:43

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Limit czasu wykonywania skryptu.

if [ $script = 0 ] <<< Za co odpowiada to ta liczba? W tym wypadku

w $script masz ilosc linijek po przegrepowaniu ps i jezeli jest zero to wynik grepa byl pusty ... IMHO ladniej sprawdzac kod powrotu grepa (zmienna $?) niz ilosc linijek

co do skryptu to jezeli proba maja byc powtarzane bez wzgledu na ich ilosc tylko nie musza byc powtarzane natychmiast to wystarczy

Kod:

while true; do
   komenda do uruchomiwnia
   sleep 3s
done

prostrze od tych kombinacji z ps ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#9  2007-10-24 21:02:29

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Re: Limit czasu wykonywania skryptu.

Witam ;)

Zrobiłem! Na razie działa będę to jeszcze testował jutro ale wydaje się być w porządku.

Teraz ostatnia rzecz ale najtrudniejsza.

Mam sobie sleep'a w tym skrypcie :) odpalam go za pomocą ./startserver.sh start

Wszystko jest w porządku do czasu gdy sleep jest ustawiony na 3s - wtedy serwer zawsze* uruchamia się 3sec. Jednak - chciał bym by skrypt sprawdzał czy serwer działa i ewentualnie włączał go np co 15minut! Jak to zrobić żeby serwer poprzez komendę ./startserver.sh włączał się odrazu a po crashu po 15minutach?

Dodam że te skrypty muszą być z sobą połączone i skryptem "zapłonowym" ( kontrolnym ) będzie server.sh i przez niego będzie włączany/wyłączany/resetowany ten serwer.

* - niezależnie od tego czy jest uruchomiony przez ./startserver.sh czy automatycznie przez skrypt po scrashowaniu.

Pozdrawiam!

P.S no i oczywiście załączam mój aktualny server.sh - zapomniałem :P


#!/bin/bash

server_start() {
/home/script/startserver.sh & # Pełna scieszka do skryptu odpalającego
}

server_stop() {
killall startgtaserver.sh # Nazwa skryptu odpalajacego serwa
killall script # Nazwa pliku wykonywalnego serwa
}

server_restart() {
server_stop
sleep 3
server_start
}
case "$1" in
'start')
server_start
;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "Użycie $0 start|stop|restart"
esac

Offline

 

#10  2007-10-24 21:47:53

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Limit czasu wykonywania skryptu.

Jak to zrobić żeby serwer poprzez komendę ./startserver.sh włączał się odrazu a po crashu po 15minutach?

w skrypcie "zaplonowym" wstawiasz w petli while najpierw odpalenie serwera (wazne zeby nie przechodzil w tlo) a potem dajesz sleep na 15 min ... skrypt odpalasz w tle co powoduje ze hodzi on non stop a gdy komenda odpalajaca serwer zakonczy to czeka 15 min i wykonuje ja ponownie ... czyli

Kod:

while true; do 
   /home/script/script 
   sleep 15m 
done

Kod:

#!/bin/bash
if pgrep script &>/dev/null; then
    echo Blad - Duplikacja procesu!
else
    sleep 3s;/home/script/script
fi

takim zabezpieczeniem lepiej objac caly skrypt "zaplonowy" lub zrobic to tak:

Kod:

while true; do
    if pgrep script &>/dev/null; then
        echo Blad - Duplikacja procesu!
        return -1
    else
        /home/script/script 
    fi
    sleep 15m
done

bo inaczej moze dojsc do odpalenia dwuch serwerow (np. w czasie oczekiwania ) lub mozna namnozyc procesow zwiazanych z skryptem zaplonowym ktory chodzi w niekonczonej petli

PS1 kod lepiej umieszczac w znacznikach [ code ] a nie [ quote ] - zachowuje wciecia
PS2 "sleep 3; komenda" to dwie instrukcje wykonywane kolejno - "poczekaj 3 sek, odpal komenda" a nie jedna -"odpal komenda po 3 sekundach"


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#11  2007-10-25 08:55:04

  TuX - Użytkownik

TuX
Użytkownik
Zarejestrowany: 2007-01-18

Re: Limit czasu wykonywania skryptu.

Dobrze, dziś pokombinuje.

Ja dopiero zaczynam pracę z bashem więc jeszcze dużo nie rozumiem.

Pozdrawiam!

// Edycja - wielkie dzięki (problem został rozwiązany - skrypt śmiga aż miło a  ja się czegoś nauczyłem :) )

Pozostaje mi dostosowanie do httpd ale z tym sobie już poradzę :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)