Portál AbcLinuxu, 5. května 2025 23:23

Dotaz: Jak zjistit kolikrát je spuštěný script

16.2.2014 15:31 Beginer
Jak zjistit kolikrát je spuštěný script
Přečteno: 595×
Odpovědět | Admin
Ahoj, poradí prosím někdo zkušený, jak zjistit spolehlivě, kolikrát je spuštěný script /root/check-signs ? Pokud někdo ví, prosím poraďte mi. Děkuji
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.2.2014 17:32 NN
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Odpovědět | | Sbalit | Link | Blokovat | Admin
pidof check-signs | wc -w
pokud je pousteny shellem, tak misto check-sign dej nazev interpretu..
16.2.2014 17:41 NN
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
nebo,
pidof -x check-signs | wc -w
17.2.2014 01:07 Beginer
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Díky, a kde ten název interpretu zjistím?
17.2.2014 09:27 NN
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Bude to pravdepodobne /bin/sh, ale jednoduse to overis z hlavicky skriptu.
17.2.2014 10:09 Beginer
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Tak že to bude takto?
pidof -x  /bin/bash/check-signs | wc -w
díky
17.2.2014 10:53 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Ne, pidof -x /root/check-signs stačí. Parametr -x zaručí, že se vrátí i pid pro cmdline /bin/bash /root/check-signs.
When your hammer is C++, everything begins to look like a thumb.
17.2.2014 16:48 Beginer
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Tak nevím co je špatně, pořád to vrací jen 0 a to spouštím přímo z toho souboru který testuji :-(
17.2.2014 21:22 kolemjdoucí
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
A takhle by to nefungovalo?

pidof -x check-signs | wc -w

Tedy za předpokladu, že neběží jiný skript, který se jmenuje taky check-signs, ale je uložený jinde...
17.2.2014 21:04 Beginer
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nikdo neporadíte? :-(
17.2.2014 21:05 Beginer
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nikdo neporadíte? :-( prosím
18.2.2014 12:58 NN
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Co je na prvni radce toho skriptu?
Michy avatar 18.2.2014 14:35 Michy | skóre: 11 | Praha
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus se inspirovat tímhle skriptem, který vypíše, kolikrát je spuštěný, včetně sebe sama a zůstane běžet na pozadí.
#!/bin/bash

PIDS=$(pidof -x $0)
CNT=$(echo $PIDS|wc -w)
echo "$$: $0 $PIDS => ${CNT}. times running"
while true; do sleep 10; done &
Jestli ale chceš zajistit, aby skript mohl běžet pouze jednou, potom se používají poněkud jiné techniky. Při startu se pokusí vytvořit a zablokovat tzv. pidfile, do kterého se uloží vlastní proces id (pid). Pokud se to podaří, znamená to, že běží sám, pokud se to nepodaří, je jisté, že daný proces už běží. Určitě si vygooglíš i lepší popis, tohle je jen ve stručnosti, abys nevymýšlel kolo.
19.2.2014 10:44 Kaarl
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Je to offtopik, ale když už jste to nakousl...
Co myslíte tím "zablokovat"?
"pidfile" udelam takto: echo $$ >$PIDFILE
Ale jak si pohlidam, abych si ho jinou instanci neprepsal?
19.2.2014 11:05 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
na zaciatku si skontrolujes, ci dany lockfile uz neexistuje.
19.2.2014 11:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Povolit spuštění jen jedné instance můžeš takto:
(
  flock -x -w 2 200
  if [[ $quot;$?$quot; != $quot;0$quot; ]]; then
    echo -e $quot;\n\nOnly one instance is allowed!\n$quot;
    exit 1
  fi
  
  #my code


) 200>$quot;/var/lock/myscript.lock$quot;
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
19.2.2014 12:38 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Oprava chybné záměny & za $ (a tedy ve výsledku $quot; za ")… :(
(
  flock -x -w 2 200
  if [[ "$?" != "0" ]]; then
    echo -e "\n\nOnly one instance is allowed!\n"
    exit 1
  fi
   
  #my code
 
 
) 200>"/var/lock/myscript.lock"
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
19.2.2014 11:12 potato
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
Idiotsky a s race condition snadno: otestuješ existenci pomocí test -f.

Správně je to složitější. Viz např. Race conditions v http://www.davidpashley.com/articles/writing-robust-shell-scripts/
19.2.2014 12:09 Kaarl
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script
No právě. Chci to dělat správně a bez "race conditions".
Díky za odkaz, jdu to nastudovat...
Michy avatar 19.2.2014 13:10 Michy | skóre: 11 | Praha
Rozbalit Rozbalit vše Re: Jak zjistit kolikrát je spuštěný script

zablokovat = zamknout

Vyjádřil jsem se dost nepřesně, ale moc jsem nepředpokládal, že by tazatel využil právě tuhle část mojí odpovědi. Přece jen otázka směřovala poněkud jinam.

Přepsání souboru zamezí právě ten zámek, jehož držitelem může být v jeden okamžik jen jeden proces. Zámku se ten proces může vzdát sám nebo se zruší automaticky s ukončením procesu, který ho držel. Ale jak říkám, přesnější popis se dá určitě někde vygooglit, mě šlo jen o to, navést ho případně na správnou stopu.

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.