Portál AbcLinuxu, 10. května 2025 05:26

Dotaz: cron - nespustí příkaz, který v konzoli bez problémů funguje

mistvan avatar 21.3.2007 17:58 mistvan | skóre: 6 | Pardubice
cron - nespustí příkaz, který v konzoli bez problémů funguje
Přečteno: 411×
Odpovědět | Admin
Může mi někdo prosím vysvětlit, jak je možné, že přes cron nespustím tento příkaz:
mplayer -dumpstream http://amp.cesnet.cz:8000/cro-leonardo.ogg -dumpfile ~/mp3/toul$(date)$(time).ogg
Jinak v konzoli bez problémů funguje, ale v cronu ne. Zkoušel jsem to omezit na:
mplayer -dumpstream http://amp.cesnet.cz:8000/cro-leonardo.ogg -dumpfile ~/mp3/toul$(date).ogg
To se pak nahrálo, ale bez přípony (což mi jedno) - výsledný soubor byl např. toulWed. Jenže já potřebuju, aby se to ještě odlišilo podle času nahrání. Může někdo poradit? Díky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.3.2007 18:05 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
1.) není nastavené prostředí stejně jako v shelu

2.) omezení délky řádku

takže si udělejte skript s

/usr/bin/mplayer -dumpstream http://amp.cesnet.cz:8000/cro-leonardo.ogg -dumpfile /home/uzivatel/mp3/toul$(date)$(time).ogg

a teprve ten spouštějte.
21.3.2007 18:14 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
A pak tu máme ještě FAQ: http://www.abclinuxu.cz/faq/skripty/skript-spousteny-v-cronu-nepracuje-spravne. Koukals, než jsi položil dotaz?
21.3.2007 21:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jste si jistý, že víte, k čemu slouží příkaz time?
mistvan avatar 21.3.2007 21:53 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Jo, vím, že s tím "time" to není vůbec korektní, ale mplayer mi to bral a vytvářel se tak název souboru, který se mi přesně hodil. Např.: "toulSt bře 21 21:46:48 CET 2007.ogg" Samozřejmě, šlo by to i takto: toul$(date +%Y%m%d%H%M%S).ogg, ale výsledný "toul20070321215142.ogg" nevypadá tak hezky:-). Docela dlouho jsem se s tím mořil a prohledával i tady diskusi, bohužel na výše uvedený odkaz jsem nenarazil. Dočetl jsem se samozřejmě o rozdílném nastavení prostředí, ale prostě mě nenapadlo, že by to šlo řešit pomocí skriptu. Díky moc za nakopnutí.
21.3.2007 22:22 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Zkus použít například: date +%Y_%m_%d_%H:%M:%

a hned poté použij "man time" ať víš k čemu je program time dobrý.
-- Nezdar není hanbou, hanbou je strach z pokusu.
Josef Kufner avatar 24.3.2007 18:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Mno, já mám radši tohle:
$ date +'%F_%T'
2007-03-24_18:28:35
ale obvykle se toho balastu (pomlčky a dvojtečky) zbavuju, aby to bylo kratší ;-)
Hello world ! Segmentation fault (core dumped)
21.3.2007 22:32 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
No, víš ale, že píšeš pěknou blbost a že jsi absolutně nepochopil, to dělá příkaz time? Zkus si napsat do příkazového řádku man time, snad Ti to dojde. Dále si do přík.ř. napiš man date, potom snad pochopíš i, jak správně napsat parametry, aby byl formát datumu podle Tvého přání. Tady máš příklad:
date "+%Y %m %d %T"
nebo lépe bez mezer: date +%Y-%m-%d_%T
mistvan avatar 22.3.2007 09:18 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
No dobře, když mi to bylo takhle vysvětleno, tak se polepším. Ale asi absolutně nechápu, proč je takový problém s tím, když použiju time a ono mi to dělá, co chci. Nestojím o nějaké abosolutní chápání, ale o fungování (a to právě absolutní být nemusí). Asi nejsem dost ortodoxní uživatel linuxu, ale když mi něco funguje, tak kašlu na to, že vlastně píšu pěknou blbost (opakuji ale blbost, která funguje). Každopádně mi šlo úplně o něco jiného a nevylučuju možnost, že pak bych se začal zabývat tím, že bych tam time psát vlastně neměl a ani nemusel (nejsem zas takový vůl, abych neuměl číst a jaksi jsem na monitoru před sebou viděl, že dělám něco nepěkného, ale měl jsem prostě v danou chvíli jiný problém), takhle jste to vyřešili za mě, tak jsem aspoň tímto dotazem zabil dvě mouchy jednou ranou.
22.3.2007 09:30 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Pokud jsem Tě pochopil, cthěl jsi získat datum a čas a myslíš si, že je na to (asi podle Tebe na čas) příkaz time. Jak se Ti tu ale již poněkolikáté snažíme vysvětlit, jseš absolutně vedle. Příkaz time slouží k úplně něčemu jinému (a ani omylem Ti aktuální čas nevrátí). Kdyby sis dal man time, pochopil bys.
mistvan avatar 22.3.2007 10:03 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
A já se Ti už poněkolikáte pokouším vysvětlit, že o tom vím a že mi to je jedno!!! A hlavně i když se asi budeš stavět na hlavu a kdo ví co ještě, tak mi to prostě dělalo, co jsem chtěl. Ale to by mě stejně zajímalo, jak vysvětlíš, že mi ten time vracel aktuální čas (nebo respektive příkaz napsaný ve výše uvedené pro Tebe z nějakého důvodu naprosto nesnesitelné podobě), čím to teda bylo, asi se to přece jen dělo omylem. Nebudu tady obšírně vysvětlovat historii, jak došlo k tomu, že se tam ten chudák time dostal, o to totiž vůbec v dotazu nešlo. První kolega, co mi odpověděl, tak to pochopil a tím to bylo vyřešeno. Jenže ono to nekončí, já tady musím pořád opakovat, že o tom vím, že je to blbost, ale fungující blbost. Jestli to jde udělat lépe, proč ne. Takže znovu, vím o tom, že time tam vlastně nepatří, já už nevím, jak jinak to mám napsat, aby to Ti to došlo. Možná sem budu asi muset zkopírovat manuálovou stránku, aby jsi mi věřil, že umím napsat "man time".
22.3.2007 10:31 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
A já se Ti už poněkolikáte pokouším vysvětlit, že o tom vím a že mi to je jedno!!! A hlavně i když se asi budeš stavět na hlavu a kdo ví co ještě, tak mi to prostě dělalo, co jsem chtěl. Ale to by mě stejně zajímalo, jak vysvětlíš, že mi ten time vracel aktuální čas
Ono to opravdu funguje, time vrací aktuální čas (přesvědčil jsi mě) :-). Důležité ale, že jsi spokojený Ty ;-) :
$ echo "nazev_souboru=$(date +%Y-%m-%d_%T)$(time)"

real    0m0.000s
user    0m0.000s
sys     0m0.000s
nazev_souboru=2007-03-22_10:25:38
22.3.2007 11:09 rich
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
stejnym zpusobem to funguje i bez toho time
echo "nazev_souboru=$(date +%Y-%m-%d_%T)"
nazev_souboru=2007-03-22_13:45:26

a pokud tam ten time necham tak pak tohle
echo "nazev_souboru=$(date +%Y-%m-%d_%T)$(time)"
-bash: command substitution: line 1: syntax error near unexpected token `newline'
-bash: command substitution: line 1: `time'
nazev_souboru=2007-03-22_13:47:34
22.3.2007 11:57 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
A "vo tom to je". Akorát tazatel je spokojený, protože mu to funguje i s tím time. Tak ať si ho tam nechá, když se mu tam líbí, že ano :-) ?
mistvan avatar 22.3.2007 15:49 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Ano, a o to přesně jde (v této diskusi a vlastně i mimo ní).
22.3.2007 16:52 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Takže tam k tomu pro Tebe důležitému příkazu time doporučuji přidat ještě toto:
$(echo "Toto echo a další zbytečné příkazy zde musí být, protože zde chci mít příkazy,
které nic důležitého nevykonávají, pouze dělají skript nepřehlednější a prodlužují ho  
(to, aby to vypadalo _nabušeně_). Prostě mám rád zbytečnosti, které mi to komplikují. 
Ale jinak jsem asi normální. :-O " >/dev/null)
mistvan avatar 22.3.2007 22:23 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Tady někdo musí mít poslední slovo, že?
22.3.2007 22:28 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
ano

doufám, že ti už došlo jakou blbost jsi v této diskuzi napsal...
-- Nezdar není hanbou, hanbou je strach z pokusu.
mistvan avatar 23.3.2007 08:06 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Mě, snad tobě! Jak jsem říkal, že jsem sám zvědavý kolikrát budu muset napsat tuto větu: Takže znovu, vím o tom, že time tam vlastně nepatří, já už nevím, jak jinak to mám napsat, aby to Ti to došlo. A je to tady, už to zase píšu, opravdu zajímavý úkaz. Chytrému napověz, hloupého nakopni, asi by v tom pořekadle mělo být něco o dalším stupni (lidské) inteligence ... Takže kolikrát ještě ... Jo už vím o co jde, tady někdo nesnese jiný názor, ale to hold nezměním. Takže vysvětlím polopaticky, nepovažuju to za blbost, ale za zbytečnost, která vadí jenom určitému typu lidí, kteří kvůli tomu asi nemůžou ani spát.
23.3.2007 18:43 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje

1. Mně, holt, o hromadě chybějících čárek ani nemluvě…

2. Chybu udělá každý, ale tvrdošíjně trvat na tom, že je to tak vlastně správně, a ještě prohlašovat ostatní za hlupáky, když si dovolí vás na chybu upozornit, to je trochu moc.

mistvan avatar 23.3.2007 22:02 mistvan | skóre: 6 | Pardubice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Takže znovu, vím o tom, že time tam vlastně nepatří, já už nevím, jak jinak to mám napsat, aby to Ti to došlo.

PS: Asi nebyla povšimnuta skutečnost, že toto je diskuse na netu a nikoli slohové cvičení. Takže radši znovu, nyní nejsme v hodině češtiny.
24.3.2007 02:53 Petr_N | skóre: 3 | Všetaty
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Kdyz tam vlastne nepatri, tak ho tam nepis. Protoze na tvuj problem nema vubec zadny vliv. Na tvuj problem ma vliv, pod jakym uzivatelem a s jak nastavenym prostredim se ten prikaz v cronu spousti, pro zacatek nahrad mplayer, date a ~ uplnyma cestama.
22.3.2007 12:05 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
V tom případě doporučuji přidat tam ještě $(test)$(echo -n) a podle vlastního výběru dalších pět příkazů, které nic nevypisují…
frEon avatar 22.3.2007 16:20 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
treba rm -rf / > /dev/null :-)
Talking about music is like dancing to architecture.
David Watzke avatar 24.3.2007 17:46 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
# rm -rf / > /dev/null
rm: cannot remove root directory `/'
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
24.3.2007 21:52 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
2>&1 # :-)
24.3.2007 16:26 Ash
Rozbalit Rozbalit vše Re: cron - nespustí příkaz, který v konzoli bez problémů funguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
příkaz toul$(date) vyprodukuje řetězec St bře 21 21:46:48 CET 2007. pokud mplayer všechny parametry které následují po --dumpfile vezme jako jeden název souboru, tak to funguje. Pokud mu to ale pošle třeba cron, je možné, že ty jednotlivé parametry "toulSt" "bře" "21" "21:46:48" "CET" a "2007" předá s uvozovkami nebo tak něco, čili mplayer jako název souboru dostane jen začátek toho očekávaného řetězce... Když pominu fakt, že spouštění takovéhoto příkazu přímo z crontab je lamerské, bude to chtít tam někam přidat uvozovky třeba
mplayer -dumpstream http://amp.cesnet.cz:8000/cro-leonardo.ogg -dumpfile "/root/mp3/toul$(date).ogg"
Že aktuální čas se získává příkazem date a příkaz time souží k něčemu jinému než k získání aktuálního času už bylo řešeno výše :)

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.