1 (edytowany przez kabal 2009-08-20 22:25:47)

Temat: Mała pomoc przy skrypcie..

Witam.
Naszło mnie aby stworzyć sobie skrypty. Jeden do montowania i jednocześnie uruchamiania transmission oraz drugi do zamykania transmission oraz jeśli nic innego nie używa dysku to odmontowywania.
Z pierwszym sobie poradziłem.. ale z drugim mam problemy.. i nie mogę nic wskórać.
Opiszę może jaka była myśl przewodnia skryptu:
Wypisuje na ekran czy jest proces transm. Następnie jeśli był taki to go zatrzymuje i przechodzę dalej, jeśli nie to wypisuje komunikat i koniec skryptu. Teraz sprawdzam czy transm. został zatrzymany, Sprawdzam ekran, jeśli nie ma wpisu to odmontowywuje dysk w przeciwnym wypadku wypisz komunikat.
A tak to wygląda:

#!/bin/sh

ps | grep "transmission-daemon" >/dev/null 2>&1
        if [ $? -eq 0 ]
        then
        echo "Zatrzymuję Transmission"
        /etc/init.d/transmission stop
        #sleep 10

        elif [ $? -eq 1 ]
        then
        echo "Transmission nie był uruchomiony"
        exit 1

ps | grep "transmission-daemon" >/dev/null 2>&1
        while [ $? -eq 0 ]
        do
        #sleep 1
                echo "Transmission zatrzymany"
        done

ps | grep "transmission-daemon" >/dev/null 2>&1
        if [ $? -eq 1 ]
        then
        echo "Odmontowywuję /p2p"
        umount /p2p
        echo "Można odpiąć dysk USB"
        else
        echo "Coś się stało lub inny proces używa /p2p, nie wiem czy można odpiąć dysk USB - sprawdź mount"
        exit 2
     fi
fi

Zahashowane wpisy "sleep" używałem aby odczekać aż się zamknie transmission - jak wiadomo czasem troszkę się on zamyka (tutaj z tym sleep nie miałem innego pomysłu żeby wykonać to inaczej bez sleep).
Niestety nie mogę sobie poradzić z właściwym odczekaniem na zamknięcie transmission.

Czy ktoś pomoże/naprowadzi bądź podsunie mi jaką sugestie? smile

Z góry dzięki

Netgear R7800 # Netgear WNDR3800 # TP-Link TL-WR1043ND v4 # TP-Link TL-WR1043ND v1 # Synology DS920+

2

Odp: Mała pomoc przy skrypcie..

Czasami zaciekawia mnie jak lubicie sobie utrudniać życie smile

if pgrep transmission > /dev/null; then 
 echo "ok"
else 
 echo "nie ma"
fi
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Mała pomoc przy skrypcie..

@Cezary

Dziękuje za odpowiedź.
Hmm.. pokombinowałem troszkę wg Twojej sugestii. Wyszło coś takiego.. ale dalej nie działa mi poprawnie:

#!/bin/sh

        if pgrep transmission > /dev/null
        then
        echo "Zatrzymuję Transmission"
        /etc/init.d/transmission stop
        echo "Czekam 10s"
        sleep 10

        else
        echo "Transmission nie był uruchomiony"
fi

        if pgrep transmission > /dev/null
        then
        echo "Odmontowywuję /p2p"
        umount /p2p
        echo "Można odpiąć dysk USB"
        else
        echo "Coś się stało lub inny proces używa /p2p, nie wiem czy można odpiąć dysk USB - sprawdź mount"
        
fi

Odmontowyuje dysk ale problem jest w tym ze nie wiedzieć czemu dalej działa trasnmisiion przez chwile..
Próbowałem kilka razy i po kilku próbach chyba transmisison zarejestrował błąd bo zaczął weryfikować wszystkie pliki które ściągałem i które ściągnąłem.. trochę to trwało zanim zweryfikował wszystko.
Czy mogę w jakiś inny sposób wykonać sprawdzanie czy transm. działa zamiast odczekiwania "sleep" ?

Poza tym.. sprawdziłem wykonywanie skryptu jak transm. jest wyłączony.. po cześć działa poprawnie.. mianowicie:

root@OpenWrt:~#/hdd/z_usr/tor-off
Transmission nie był uruchomiony
Coś się stało lub inny proces używa /p2p, nie wiem czy można odpiąć dysk USB - sprawdź mount 

..nie odmontowywuje mi dysku.. a z palca odmontuje poprawnie.. co jest nie tak?!

Netgear R7800 # Netgear WNDR3800 # TP-Link TL-WR1043ND v4 # TP-Link TL-WR1043ND v1 # Synology DS920+

4

Odp: Mała pomoc przy skrypcie..

Ideologia. Ten drugi if - jeżeli działa transamission to robisz odmontowanie dysku. A powinno być na odwrót.

Praca domowa: if pgreg daje true jeżeli dany proces jest uruchomiony. Wiec zrób pętle while która kreci się tak długo jak proces żyje...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Mała pomoc przy skrypcie..

Cezary napisał/a:

Ideologia. Ten drugi if - jeżeli działa transamission to robisz odmontowanie dysku. A powinno być na odwrót.

Praca domowa: if pgreg daje true jeżeli dany proces jest uruchomiony. Wiec zrób pętle while która kreci się tak długo jak proces żyje...

Dzięki za wskazówkę.. właśnie skończyłem.. i działa big_smile

Oto skrypty dla zainteresowanych:

START:

#!/bin/sh

mount | grep "/p2p" > /dev/null 2>&1

        if [ $? -eq 0 ]
        then
        echo "Dysk USB był już zamontowany - uruchamiam Transmission"
        /etc/init.d/transmission start
        echo "Transmission uruchomiony"

        elif [ $? -eq 1 ]
        then
        echo "Montuję dysk USB do /p2p"
        mount /p2p > /dev/null 2>&1
        mount | grep "/p2p" > /dev/null 2>&1

                if [ $? -eq 0 ]
                then
                echo "Dysk USB zamontowany poprawnie - uruchamiam Transmission"
                /etc/init.d/transmission start
                echo "Transmission uruchomiony"

                elif [ $? -eq 1 ]
                then
                echo "Nie mogę zamontować dysku USB, sprawdź kabel USB"
                exit 1
        fi
fi

STOP:

#!/bin/sh

        if pgrep transmission > /dev/null
        then
        echo "Zatrzymuję Transmission"
        /etc/init.d/transmission stop

        else
        echo "Transmission nie był uruchomiony"
        exit 0
fi

ps | grep "transmission-daemon" >/dev/null

        while [ $? -eq 0 ]
        do
        echo "Czekam aż Transmission zakończy działanie"
        sleep 5
        ps | grep "transmission-daemon" >/dev/null
        done
        echo "Transmission zakończył działanie"

mount | grep "/p2p" >/dev/null

        if [ $? -eq 0 ]
        then
        echo "Odmontowywuję /p2p"
        umount /p2p >/dev/null 2>&1
fi

mount | grep "/p2p" >/dev/null

        if [ $? -eq 1 ]
        then
        echo "Można odłączyć dysk USB"

        else
        echo ">> UWAGA!!! Nie mogę odmontować /p2p. Nie odłączaj dysku USB!!! <<"
        echo "Prawdopodobnie /p2p wykorzystuje inny proces."
        echo "Dla pewności sprawdź mount i ps"
fi

Czekam na uwagi smile  Chętnie poprawię na lepiej/prościej wink

Netgear R7800 # Netgear WNDR3800 # TP-Link TL-WR1043ND v4 # TP-Link TL-WR1043ND v1 # Synology DS920+