Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: cron - spustí skript, ten zakrátko havaruje, nevypíná počítač v zadaný čas  (Přečteno 2262 krát)

luponzo

  • Host
Opět jsem narazil při řešení banálního problému v UBUNTU 8.10 na nemožnost dopátrat se rychlého a jasného řešení. Pevně věřím, že nejsem sám, kdo ho má nebo měl, takže se bude určitě hodit, za čas možná opět i mě, prostě ta pamět už neslouží :-))
Tak tady je.
Problém: Cron je správně nastavený a umístěný ( /etc/cron.d/nazev_souboru ) , požadavek je, aby spouštěl pod účtem root pořadovaný skript nebo vypínal PC. Práva souboru cronu jsou 644, vlastník root, skupina crontab. Cron sice skript v zadaný čas spustí, ale ten po 2 sekundách činnosti havaruje - prostě se ukončí ze záhadného důvodu a nedoběhne správně do konce. V logu nikde nic, a když už, tak jen hláška: Při běhu programu nastala chyba. Pokud je nastaven shutdown, neprovede se. Syntaxe v cronu je asi taková:

00 20 * * * root sh /home/michal/bin/muj_skript > /var/log/logovani_behu.log 2>&1

popř:

00 23 * * * root shutdown -h now >/dev/null 2>&1

Takže vše funguje jak má, ale bohužel ne do úspěšného konce.
Shutdown se nespustí vůbec!
Skript spuštěný ručně v konzole ale běží normálně. Jeho syntaxe  je např. taková:

#! /bin/bash
....nejaky vlastni kod ....


Takže funkční řešní ( neříkám že nejlepší, ale takto už to funguje ):
Soubor cronu jsem opravil, respektive doplnil na toto znění:

SHELL=/bin/sh
PATH=/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

00 20 * * * root sh /home/michal/bin/muj_skript > /var/log/logovani_behu.log 2>&1

Pokud nebude třeba logování do souboru, pak by mohla stačit úprava na:

SHELL=/bin/sh
PATH=/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

00 20 * * * root sh /home/michal/bin/muj_skript > /dev/null 2>&1

Také se zde řešily problémy s automatickým vypnutím PC pomocí cronu. Pak stačí, aby soubor cronu vypadal asi takto:

SHELL=/bin/sh
PATH=/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
00 23 * * * root shutdown -h now >/dev/null 2>&1


Zde není potřeba žádný speciální spuštěcí skript, použije se přímo příkaz shutdown s parametrem halt a spouštěný now, zde nastavený na 23:00 hodin na každý den, ale to už jsou jen detaily mimo řešený problém.
Po každé změně - editaci souboru cronu je třeba cron restartovat příkazem:

sudo /etc/init.d/cron restart

Přeji hodně zdaru s UBUNTU 8.10. Já osobně jsem s ním velmi spokojený :-)










kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
tohle je dotaz a nebo sdeleni?

luponzo

  • Host
tohle je dotaz a nebo sdeleni?

Doufám, že je to z textu jasné, že je to spíše tip či návod, jak odstranit problém. Když jsem ho řešil, nejprve jsem hledal na foru, jestli už to někdo vyřešil. Odkazů mnoho, ale nikde nic, co by vedlo ke konstruktivnímu konečnému řešení, takže jsem z každého vyzkoušel něco a výsledek cca 3 hodinového experimentování zde předkládám. Když už se to třeba někomu podařilo vyřešit, uzavřel diskusi jen slovy: "děkuji všem, už mám vyřešeno!", ale nepodělil se o svůj úspěch a postup, který by pomohl nám ostatním. Tak třeba tento můj tip k řešení někomu ty 3 hodiny ušetří :-) Jinak má UBUNTU moc hezky zpracované wiki, hodně mi pomohlo v začátcích, gratuluji všem, kdo se na tom podílejí. 

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Aha, ja jen, ze mi to prislo krapet zmatecne, hlavne kvuli tomu nadpisu vlakna. Nestacilo proste napsat:

Cron pri spousteni pouziva promennou PATH ve tvaru "/usr/bin:/bin" (viz man crontab) a proto nenajde prikazy lezici mimo tyto dva adresare. Resenim je bud rozsirit promennou PATH o dalsi adresare a nebo uvadet celou (absolutni) cestu k prikazum.

?

Uz to tu na foru padlo vickrat, pokud tato informace neni zminena na wiki, asi by to stalo za update.

nettezzaumana

  • Host
tohle je dotaz a nebo sdeleni?
.. to je tlumeny vzlykot doplneny o obcasne posmrknuti ..

 

Provoz zaštiťuje spolek OpenAlt.