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ý :-)