Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: timmynovak 13 Listopadu 2011, 19:59:14

Název: Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 13 Listopadu 2011, 19:59:14
Ahoj, mám následující skript spouštěný cca 1 za 5 vteřin a testující mi existenci procesu (je to navíc démon):
Kód: [Vybrat]
if [ `pgrep j1.out` ]; then
  exit
else
  /home/user1/j1.out
fi


dnes se mi ale stalo, že skript začal spouštět další a další j1.out, což o to, další bych chápal, ale proč, když běžel první a nedošlo k jeho pádu spustil nový? V lozích nic:( Díky za nakopnutí.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 13 Listopadu 2011, 20:32:40
Takže nakopnutí... OK.  ;)
Kód: [Vybrat]
~ $ pgrep sleep
14541
~ $ if [ `pgrep sleep` ]; then echo sleep běží; else echo neběží; fi
sleep běží
~ $ sleep 1m &
[1] 14562
~ $ if [ `pgrep sleep` ]; then echo sleep běží; else echo neběží; fi
bash: [: 14562: unary operator expected
neběží
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: RNA 13 Listopadu 2011, 21:05:36
Ještě bych doplnil:
rna@asrock-rna:~> pgrep http
3970
3975
3976
3978
3979
3980
9152
9153
9154
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 13 Listopadu 2011, 21:42:48
když je tam vícekrát, tak chápu, že se to pak spouští dokola... ale on by měl běžet jen jednou, nic dalšího, vyjma tohoto skriptu ho spustit nemůže, ani není suspendován, nic takového:(
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: GdH 13 Listopadu 2011, 22:32:03
Tohle by mělo být lepší:
Kód: [Vybrat]
if ! pgrep j1\.out; then /home/user1/j1.out; fi
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 13 Listopadu 2011, 23:09:59
Tohle by mělo být lepší:
Kód: [Vybrat]
if ! pgrep j1\.out; then /home/user1/j1.out; fi
Na co to lomítko?  ;)

Kód: [Vybrat]
~ $ strace -e trace=execve pgrep j1\.out
execve("/usr/bin/pgrep", ["pgrep", "j1.out"], [/* 37 vars */]) = 0
~ $ strace -e trace=execve pgrep j1.out
execve("/usr/bin/pgrep", ["pgrep", "j1.out"], [/* 37 vars */]) = 0
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 13 Listopadu 2011, 23:12:40
Osobně bych doporučoval:
1. Nepoužívat
Kód: [Vybrat]
if [ `prikaz` ]
ale
Kód: [Vybrat]
if prikaz

2. Používat plnou cestu
Kód: [Vybrat]
pgrep -f '/home/user1/j1\.out'
# nebo
pidof /home/user1/j1.out
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: GdH 13 Listopadu 2011, 23:32:03
Tohle by mělo být lepší:
Kód: [Vybrat]
if ! pgrep j1\.out; then /home/user1/j1.out; fi
Na co to lomítko?  ;)

Máš pravdu, mám tam chybu, mělo to být:
Kód: [Vybrat]
if ! pgrep 'j1\.out'; then /home/user1/j1.out; fi
Tečka značí libovolný znak přeci. Ale escapovat se dá pouze po uzavření do uvozovek.

Asi jsi to nepsal, že nevíš, ale zas to třeba neví někdo jiný :)

Mi to nedá ještě dovysvětlit.. Tak jak jsem to napsal lomítkem escapuju tečku pro interpret Bashe, který to projede, a pgrepu dodá stejně pouze řetězec j1.out, zatímco po uzavření do uvozovek, dostane pgrep regulární výraz v plném znění 'j1\.out', aby vyhledal řetězec s tečkou a né libovolným znakem na jejím místě.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 09:44:57
díky všem, chápu různá řešení, ale nerozumím tomu, proč když proces prokazatelně běžel, tak můj skript zdetekoval, že neběží:(
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: ntz_reloaded 14 Listopadu 2011, 09:54:52
Ahoj, mám následující skript spouštěný cca 1 za 5 vteřin a testující mi existenci procesu (je to navíc démon):
Kód: [Vybrat]
if [ `pgrep j1.out` ]; then
  exit
else
  /home/user1/j1.out
fi


dnes se mi ale stalo, že skript začal spouštět další a další j1.out, což o to, další bych chápal, ale proč, když běžel první a nedošlo k jeho pádu spustil nový? V lozích nic:( Díky za nakopnutí.
protoze ten test je blbost ... blbe napsanej ...:D ..

Kód: [Vybrat]
test `pgrep $foo` je jednim slovem kravina ;)

dej tam:

Kód: [Vybrat]
pgrep j1.out || /home/user1/j1.out;
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 10:59:21
OK, chápu, že když to nezafungovalo, je to rozbitý:) to vím taky. díky i za radu, jak z toho ven. učím se věci ale i proto, abych jim rozuměl, čili, můžeš mi, prosím, vysvětlit, zda:
pgrep `cokoli`

při výskytu cokoli pouze 1 x vrátit najednou něco jiného, než jindy? A pokud ano, proč? žil jsem v domění, že vypíše proces (PID). Děkuji.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: ntz_reloaded 14 Listopadu 2011, 11:07:21
michas jablka s hruskama ..  precti si prosim v manualu a vyzkousej jak funguje test ,, nijak to nesouvisi s pgrepem a tim co vypise
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 11:21:15
Kód: [Vybrat]
       test ( EXPRESSION )
              EXPRESSION is true

předpokládám, že jakékoli kladné číslo je se vyhodnotí jako TRUE. Nebo se pletu? A PID bylo k dispozici, tj. kladné číslo ve výrazu. A nebo to (což je velmi pravděpodobné) nechápu.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: ntz_reloaded 14 Listopadu 2011, 11:33:05
Kód: [Vybrat]
# [ `false` ] || echo takhle to nefunguje
takhle to nefunguje

# [ false ] && echo takhle to funguje
takhle to funguje
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 11:44:49
děkuji
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 14 Listopadu 2011, 12:10:07
Nevysvětluje to ale, proč mu to někdy "fungovalo", a někdy ne.

Jinak jsem se koukal, že je to docela oblíbený způsob testování, např.  :)
Kód: [Vybrat]
http://www.google.com/codesearch#naIFDuIU500/trunk/devtools/ydoc/po-tools/po-insert&ct=rc&cd=8&q=if\%20\[\%20\%60[^=]*\%60\%20\]%20lang:^shell$
viz řádek if [ `grep fuzzy $i` ] ; then
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: GdH 14 Listopadu 2011, 12:16:40
Řekl bych, že důvodem bylo to, co naznačil RNA - měl už tehdy omylem puštěno instancí více.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: ntz_reloaded 14 Listopadu 2011, 12:17:45
ach jo .. to co odkazujes je **spatne .. to ze to je na internetu neznamena, ze to neni blbost

proc kluk tvrdi ze to predtim fungovalo a potom ne neresim .. je to zcela irelevantni
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 14 Listopadu 2011, 12:32:22
ach jo .. to co odkazujes je **spatne .. to ze to je na internetu neznamena, ze to neni blbost

proc kluk tvrdi ze to predtim fungovalo a potom ne neresim .. je to zcela irelevantni
Se hned nerozčiluj, já nikde netvrdím, že je to správně   :)
A není to "někde z internetu", vzal jsem to z yast2-devtools ze stránek OpenSuSE Factory for noarch
http://rpmfind.net//linux/RPM/opensuse/factory/noarch/yast2-devtools-2.21.6-1.1.noarch.html

Jinak souhlas s GdH.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 12:39:41
Řekl bych, že důvodem bylo to, co naznačil RNA - měl už tehdy omylem puštěno instancí více.
Ne, neměl:)
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 12:41:53
proc kluk tvrdi ze to predtim fungovalo a potom ne neresim .. je to zcela irelevantni
pro mne zcela relevantni, protoze se vzdy vse snazim pochopit. jestlize cca rok mi to funguje na dvou mistech k plne spokojenosti, tak se snazim pochopit, co zpusobilo to, ze to najednou bylo blbe. vim, ze vice instanci daneho procesu nebezelo. Najednou z niceho nic se test vyhodnotil spatne. Ja nepopiram a v tento moment ani neresim to, ze ten test je spatne jako takovy, jen bych chtel vedet, proc najednou selhal. Když budu místo sčítání používat násobení, tak sice dostávám špatný výsledek, ale vždy stejný. tady se to tak nestalo:(
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 14 Listopadu 2011, 12:54:27
Další varianta je, že ti běžel proces, který vyhověl vzoru j1.out, čili např. můj12outsider.

Jasněji bude, když spustíš ten skript s přepínačem -x (debug)
Kód: [Vybrat]
#! /bin/bash -x
a jeho výstup zaznamenáš do logu.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 14 Listopadu 2011, 17:15:23
dík za tip na zaznamenávání, myslíms i, že se to už nestane (vzhledem k tomu, jak dlouho se to nestalo předtím), shoda masky je jistě vyloučitelná, já ten název jen zkrátil, ve skutečnosti je to jddrz2011tm.out
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: ntz_reloaded 15 Listopadu 2011, 10:02:13
me uz to stve .. nechapu na co se furt dokola ptas ... ja osobne neverim ze to bylo jak rikas - tim nemyslim ze bys nerikal pravdu, ale spis myslim ze v tom mas trocha bordel .. proste to nahrad ve skriptu za

if ! pgrep j1.out; then
    /home/user1/j1.out;
fi
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: timmynovak 15 Listopadu 2011, 20:32:11
a víš co štve mne? tvoje neuvěřitelná nadutost a povyšování, nejsem jediný, kdo má ten názor. když neznáš odpověď, tak neodpovídej. a ne, nemám v tom bordel, vím, že prostě proces se stejným jménem se tam objevit znovu nemohl. OK, ten test je blbě a na to jsem neřekl ani ň. To ale nevysvětluje to, k čemu došlo. OK, chápu, odpověď nevíš nebo nechceš odpovědět - ale prosím už se konečně přestaň navážet do mne nebo do kohokoli jiného. Ano, mám tě osobně za nadutého a přechytralého hňupa. Ne nadarmo se o tobě říká, ten, jehož jménos enevyslovuje. máte ledasco společného. a klidně mi dej ban.
Název: Re:Nezafungoval mi správě pgrep, ale nevím proč:(
Přispěvatel: daysleeper 15 Listopadu 2011, 21:02:31
Pořád se zde opakuje to stejné dokola, jen ostřejším tónem, takže zamykám.
V případě nějakých nových skutečností prosím založit nové vlákno.