Portál AbcLinuxu, 12. května 2024 11:09


Dotaz: Ukonceni behu "celeho" skriptu

27.1.2012 11:10 Jiřík 1435 | skóre: 8
Ukonceni behu "celeho" skriptu
Přečteno: 237×
Odpovědět | Admin
Dobry den, sem zacatecnik v programovani pod linuxem. Chtel bych se zeptat na reseni nasledujiciho problemu. Mam skript s nazvem zaloha1.sh:
#!/bin/sh
rsyncdir() {
        rsync $1 
        sync
}

(
while true; do
        rsyncdir adresar1
        sleep 10
        rsyncdir adresar2
        sleep 10
done
) &
Potrebuji vedet jak skript jednoduse ukoncim kdyz v seznamu procesu bezi jak /bin/sh ./zaloha1.sh s PID1 tak i - rsync adresarn s PID2. Kdyz totiz zadam kill PID1 proces s rsync adresarn stale bezi. Doufam ze jsem popsal svuj problem spravne.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.1.2012 11:18 Ragzid | skóre: 24 | blog: Pivní koutek | Liberec-Brno
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jasne ze pobezi, protoze cela ta smycka bezi na pozadi, diky "&", ma to tam nejaky zvlastni duvod?
27.1.2012 13:53 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Ano, chci ten skript z konzole kdykoliv spustit, pokracovat v praci a konzoli ukoncit...neco jako sluzbu.
27.1.2012 11:19 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z man stránky rsyncu:
EXIT VALUES
       0      Success
       ...
       20     Received SIGUSR1 or SIGINT
Takže pokud ukončíte ten rsync signálem SIGUSR1, tak by mělo stačit změnit:
rsyncdir() {
        rsync $1
        [ "$?" -eq 20 ] && exit
        sync
}
Další možnost je ukončovat pokud existuje nějaký soubor (tj. například vytvořením /tmp/skonci.zalohu by se skript ukončil):
        rsyncdir adresar1
        [ -e "/tmp/skonci.zalohu" ] && exit
I am always ready to learn although I do not always like to be taught. (W. Churchill)
27.1.2012 12:48 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Já to zase řeším tak že při spuštění programu vytvořím soubor "/var/run/nazevprogramu.pid" kam zapíšu pid programu.

Pokud program končí tak ho zase smažu.

A když potřebuji přerušit program tak tam kde to potřebuji testuji zda ten soubor existuje a pokud ne korektně uklidím a ukončím program.

Takže když chci z jiného programu ukončit ten spuštěný tak mu smažu ten soubor a on se ukončí sám.
27.1.2012 13:56 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
To sem zkousel ale tim ukoncim pouze proces /bin/sh ./zaloha1.sh s PID1. Proces rsync adresarn s PID2 bezi dale.
27.1.2012 14:18 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
V tom skriptu se musíš postarat o ukončení toho co jsi z toho skriptu spustil.

Já to mám trochu jednoduší program v C mi vypisuje na LED displej a běží na pozadí pořád a jak mu smažu soubor s pid tak se prostě korektně ukončí.
27.1.2012 13:54 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Ano ale jak si elegantne zjistim PID obou procesu ?
27.1.2012 14:17 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Proč obou?
I am always ready to learn although I do not always like to be taught. (W. Churchill)
27.1.2012 14:24 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Protoze kdyz ukoncim beh /bin/sh ./zaloha1.sh tak rsync ktery ten skript spustil bezi dale a ja chci ukoncit vse co dany skript spustil.
27.1.2012 14:46 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Ukonceni behu "celeho" skriptu
Jistě, proto jsem navrhl, že otestujete návratovou hodnotu a pak skript ukončíte. Tudíž bude stačit zabít jen ten rsync.

Při řešení se souborem (řešení s výmazem souboru je elegantnější) pak jen přidáte ten test do každého místa, kde je OK skončit. To má výhodu, že nemusíte nic ukončovat násilně, což je obvykle lepší řešení.
I am always ready to learn although I do not always like to be taught. (W. Churchill)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.