Fórum Root.cz

Hlavní témata => Software => Téma založeno: Vrták 24. 03. 2013, 11:03:04

Název: Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 24. 03. 2013, 11:03:04
Nemůžu nic nají, ale možná jsem jen kousek vedle a nevidím. Mám starou binárku 32 bit, která mě z řádku jede, ale ze skriptu se nespustí. Nejsem guru, takže jsem ve skriptu vyzkoušel akorát /usr/local/bin/binarka && echo prikaz prosel a ejhle, on skutečně projde, ale ps -ax jej neukáže a skutečně ani neběží.
Je nějaký rozdíl ve spuštění z řádku a ze skriptu?
Díky za nakopnutí
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Mirek Prýmek 24. 03. 2013, 11:20:56
/usr/local/bin/binarka && echo prikaz prosel a ejhle, on skutečně projde, ale ps -ax jej neukáže a skutečně ani neběží.
Konstrukce "a && b" znamená "spusť b v případě, že a skončil bez chyby". Tudíž příkaz skončil a v ps ho vidět nemůžeš.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 24. 03. 2013, 11:26:51
Tak to jsem byl asi vedle tady, ale to nevysvětluje, proč příkaz skončil, když má běžet dál, a pokud naklepu /usr/local/bin/binarka a odentruju, tak i běží.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Mirek Prýmek 24. 03. 2013, 11:28:24
Asi těžko ti někdo poradí, proč ti neběží příkaz, když nenapíšeš jaký.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: monitor 24. 03. 2013, 12:38:06
su programy, ktore, aj ked nevyuzivaju  vacsinou nevyuzivaju terminal, tak si predsa len skontroluju, ci stdout je terminal, alebo nieco v tom zmysle...

v kazdom pripade, moj navrh je: skus presmerovat vystup (stdout) aj chybovy vystup a budes mudrejsi...

/usr/local/bin/prikaz > log.txt 2>&1 &&

a pozri sa potom do toho suboru

pripadne si pozrit man stranku

mozno ma nejaky prepinac typu: "daemonize", ci "run in background"
 
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: monitor 24. 03. 2013, 12:40:14
a ked ani to nepomoze, tak si spusti:

strace /usr/local/bin/prikaz > log.txt 2>&1

a uvidis, ake robi syscall-y, a aky zlyha - niekde blizko konca...

(porovnaj si tie log subory, ked to spustis z konzoly, a zo skriptu, a budes mudrejsi :-)
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 24. 03. 2013, 13:26:35
v obou případech je log.txt prázdný

Tohle mě dává jako přepínače

usage: redemptic [-d] [-C <configfile>]
        -d               run in the foreground (implies -v and -q)
        -v               be verbose
        -q               don't use syslog (use on old systems)
        -C <configfile>  use <configfile> instead of default (/var/etc/redemptic.cfg)
        -f               filter on specific demux data (saves some CPU,
                         but some platforms might not handle this very well)
        -n               show network packets
        -s               disable server
        -t               show timing
        -l               disable self-learning capabilities
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 24. 03. 2013, 13:33:27
Mě to přijde, jako by nenašel config, když je spuštěn ze skriptu, protože se chová přesně tak, jako když jej spustím bez parametru -C
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: hawran diskuse 24. 03. 2013, 16:21:29
Mě to přijde, jako by nenašel config, když je spuštěn ze skriptu, protože se chová přesně tak, jako když jej spustím bez parametru -C

A zkoušel jsi to teda pustit přes ten strace?
Kdyby to něco nemohlo najít, viděl bys to tam ...
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Jakub Neburka 24. 03. 2013, 16:23:44
A co vyzkoušet tu -d volbu?
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 24. 03. 2013, 18:33:26
Tak jsem to vyzkoušel a oči mě bolej z toho porovnávání logů. Bohužel, se strace mi binarka nenaběhla jak ze skriptu, tak z řádku. A ty logy se krom pidů a ještě pár nepodstatných čísel nelišili v ničem. Nechápu, co tomu může být, v předošlé instalaci debianu to šlo normálně, ale po reinstalaci to takhle zblblo. Debian jsem instaloval ze stejného zdroje, tady chyba nebude. Navíc na podobném stroji - záložném - to běží v pohodě. Já ten prográmek spouštím z rc.local, nemůže být někde chyba v prioritách procesů? - tomu ještě moc nerozumím.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Mirek Prýmek 24. 03. 2013, 20:48:06
Já ten prográmek spouštím z rc.local, nemůže být někde chyba v prioritách procesů? - tomu ještě moc nerozumím.
Jo takhle! No ale to je nová informace, kterou jsi nám nedal.  Startovací skripty se spouští v jiném prostředí než jaké máš, když jsi přihlášený. Nejčastější problém je, že startovací skript má jinak nastavenou proměnnou PATH. Zkus do toho skriptu dát název i s celou cestou: "/usr/local/bin/redemptic ..."

Pokud to nepomůže, bude muset poradit někdo, kdo zná konkrétně Debian, co by tam ještě mohlo hrát roli.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: pet 25. 03. 2013, 09:33:20
Při startu terminálu se provede source /etc/profile, tím se přenastaví prostředí. Při startu z cronu, rc scriptu a podobně nastavené není. Často pomůže dát scriptu ono source /etc/profile.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Jakub Neburka 25. 03. 2013, 09:51:53
Já ten prográmek spouštím z rc.local, nemůže být někde chyba v prioritách procesů? - tomu ještě moc nerozumím.
Jo takhle! No ale to je nová informace, kterou jsi nám nedal.  Startovací skripty se spouští v jiném prostředí než jaké máš, když jsi přihlášený. Nejčastější problém je, že startovací skript má jinak nastavenou proměnnou PATH. Zkus do toho skriptu dát název i s celou cestou: "/usr/local/bin/redemptic ..."
+1, nejčastější problém v rc je s PATH ;]
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 25. 03. 2013, 10:13:12
v rc.local mám zápis ve tvaru:
/usr/local/bin/redemptic -C /usr/local/etc/redemptic.cfg
parametr -C určuje path ke konfiguračnímu souboru
dále spouštím i jiné procesy, které jsou na sebe vázány, pořadí je žádoucí, ale není nutné, koneckonců můžu redemptic spuštět i ručně, ale z hlediska problému jako takového mi to hlava nebere.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 25. 03. 2013, 10:38:34
Takže změna.
Z rc.local ta binárka spustit jde. Já to doteď zkoušel ze skriptu, který mám jako start pro ruční nahození. Tedy problém se mění na:
Proč jde program spustit z rc.local a z jiného skriptu, vytvořeného rootem nikoliv? Je nějaký rozdíl mezi nima?
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: JardaP . 25. 03. 2013, 11:19:16
Kdyz chcete, aby nekdo hledal deset rozdilu, tak sem snad, proboha, dejte posledni verzi tech skriptu!
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: dddd 25. 03. 2013, 11:50:10
Principialni rozdil mezi spoustenim ze scriptu a primo z radky neni. Oboje vola jednu dalsi funkci, ktera ve skutecnosti rika jadru, jak to spustit (man exec).

Podle toho co popisujes muze za problemy asi nastaveni promennych prostredi. Ty maji ruzni uzivatele/ucty.processy vetsinou jine. Nektery programy (treba ty co pouzivaji home nebo terminal) je casto pouzivaji a pokud nenajdou nebo najdou nejakou nesmyslnou hodnotu, tak muzou spatnout.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 25. 03. 2013, 12:05:56
Nerozčilovat se prosím, nejsem tak znalý, abych vůbec věděl která informace je pro rádce důležitá. Problém je tímto prakticky vyřešen, nicméně se jen snažím přijít tomu na kloub v rámci vlastního posunu ve znalostech. Rozdíl  mezi rc.local skriptem není žádný, můj skript jsem psal tak, že jsem si rc.local překopíroval do /usr/local/bin a přejmenoval na start.sh.
Podíval jsem se na oprávnění obou skriptů, jsou stejná, rozdíl je jen v oprávněních adresářů, ve kterých jsou umístěna
Kód: [Vybrat]
root@server:/etc# ls -ld /etc
drwxr-xr-x 70 root root 4096 25. bře 10.20 /etc
Kód: [Vybrat]
root@server:/etc# ls -ld /usr/local/bin
drwxrwsr-x 2 root staff 4096 25. bře 10.41 /usr/local/bin

V docel adobrém článku, který studuju, není nic o rozdílu, který tady vidím- číslo za drwxr-xr-x

Předpokládám, že tady někde bude čokl zahrabán a myslím, že pokud chci koncipovat nějaká svá použitelná skripta, budu muset detailně prostudovat nekonečně složitou problematiku práv a prozatím asi umísťovat skripta v adresáři /etc
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 25. 03. 2013, 12:09:45
Ješté doplním, zapoměl jsem na rozdíl root root a root staff v právech adresářů, samozřejmě jsem ho viděl.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: JardaP . 25. 03. 2013, 12:42:28
Ješté doplním, zapoměl jsem na rozdíl root root a root staff v právech adresářů, samozřejmě jsem ho viděl.

Oroboha, skripta zadna radsi nekoncipujte. Uz tak je stav skolstvi v CR tragicky.

A problematika pristupovych prav v *nixech je naopak velice jednoducha (ponechame-li stranou ACL). Pokud chcete neco sloziteho, poridte si Widle. Tam se da nadelat v pravech takovy bordel, ze se v tom ani Ballmer nevyzna.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Vrták 25. 03. 2013, 14:08:18
Ďekuji za názor, ale i tak bych přivítal jednoduché vysvětlení, zda-li může mít uvedený rozdíl na svědomí takovéto chování.
Linuxu se budu učit i navzdory jednoduchosti práv v linuxu a bordelu ve widlích.
Název: Re:Je nějaký rozdíl mezi skriptem a řádkou?
Přispěvatel: Jakub Neburka 25. 03. 2013, 16:14:45
Ďekuji za názor, ale i tak bych přivítal jednoduché vysvětlení, zda-li může mít uvedený rozdíl na svědomí takovéto chování.
Linuxu se budu učit i navzdory jednoduchosti práv v linuxu a bordelu ve widlích.

Jednoduchou odpověď jste dostal. Ano, rozdíly být můžou. Může být použitý jiný shell a před voláním může být jiný environment.. Na konkrétnější odpověď jste poskytl málo informací. Doporučoval bych do skriptů přidat nějaké debugovací výpisy...