Portál AbcLinuxu, 8. května 2025 18:28

Dotaz: Cron neprovede skript s přesměrovaným výstupem

6.2.2012 16:38 Stanley
Cron neprovede skript s přesměrovaným výstupem
Přečteno: 282×
Odpovědět | Admin
V crontabu mám následující řádek

00 20 * * * /home/cs/script_cron.sh >> /home/cs/log/`date '+%Y%m%d'`_cron.log 2>> /home/cs/log/`date '+%Y%m%d'`_cron_err.log

Ve 20 hodin se má spustit script_cron.sh a standardní výstup má jít do log souboru, který má tvar YYYYMMDD_cron.log a chybový výstup do souboru, který má tvar YYYYMMDD_cron_err.log. Když řádek překopíruji do shellu, provede se přesně, co má, ale cron neprovede vůbec nic. Když z názvu výstupních souborů vyndám příkaz date, tak se skript provede i v cronu, takže záludnost očekávám někde v příkazu date kontra cron. Poradíte někdo?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.2.2012 17:03 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přesměrování výstupu nebo spouštění vnitřního příkazu v `…` je záležitost shellu, cron tomu nerozumí. Přesuňte ten příkaz do shellového skriptu a z cronu spouštějte ten skript – pak vám to bude fungovat.
6.2.2012 17:18 Little_green_man
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
To ma prekvapuje... Mne cron backticky aj presmerovania zvlada bez problemov. On ich nepusta cez sh -c? Nie je to skor v tom %? (v crontabe to je myslim newline a treba ich escapovat).
6.2.2012 17:23 Little_green_man
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
* * * * * /bin/echo test > /tmp/`/bin/date '+\%s'`

takto mi to chodi.
6.2.2012 17:29 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
To záleží na konkrétní implementaci. I pak je ale možné, že sh -c bude něco jiného, než uživatelův shell. Každopádně když se ten příkaz dá do samostatného skriptu a bude se testovat spouštění toho skriptu z cronu a z příkazové řádky, budou to už mnohem podobnější prostředí.
6.2.2012 18:39 Little_green_man
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
V tomto pripade sa mi to vidi zbytocne (vec nazoru, nekamenovat). Vyrabat dalsi wrapper len na to je overkill, ten commandline zasa taky komplikovany nie je.
6.2.2012 18:59 l4m4
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Skript obsahuje, co a jak se má provést. Crontab definuje, kdy se to má provést. Nematlal bych do to sebe.
6.2.2012 22:49 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Přesměrování v příkazu spouštěném z cron tabulky uvádí v příkladech i posixová manuálová stránka crontab(1p).
Řešení 1× (Dreit)
rADOn avatar 6.2.2012 18:44 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Znak procenta má v crotnabu speciální význam a je potreba ho escapovat. Asi tak:
#0 2 * * 1 nobody fooscript.py && date +'\%Y\%m\%d\%H\%M\%S' > /var/log/foo/foo.stamp
Z manstránky vixie cronu:
… Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. …
Kromě toho cron implicitně nastavuje $SHELL na /bin/sh což bude nejspíš dash nebo bash v bourne-kompatibilním režimu. Pokud chceš používat bashizmy, stačí ho nastavit na bash a žádný obalovací skript není třeba.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
6.2.2012 21:14 Stanley
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Díky moc za radu, escape backslash to vyřešil a funguje to, jak má.
6.2.2012 22:55 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Cron neprovede skript s přesměrovaným výstupem
Z toho plyne ponaučení: občas neškodí přečíst si manuálové stránky i od toho, co člověk dobře zná - nebo o čem si to myslí.

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.