Cron furcsaság

Fórumok

Üdv mindenkinek.
Belefutottam egy cron+szkript furcsaságba. Összeollóztam egy mentő szkriptet, amely merevlemezre és szalagra ment.
Az alap ez volt. http://www.faqs.org/docs/securing/chap29sec306.html
Ez ment is rendesen, majd átírtam erre:
#!/bin/bash
#
#
# Változók
#
#
PATH=/usr/local/bin:/usr/bin:/bin
LSTU=/root/userdok.lst # lista
LSTK=/root/konyveles.lst # lista
LSTM=/root/mail.lst # lista
LSTF=/root/full.lst # lista
LSTE=/root/etc.lst # lista
BACKUPDIR=/var/munka/mentesek
DATUM=$(date --iso-8601) # aktuális dátum 2010-10-31 formátumban
LOGFILE=/root/Backup_Dir/$DATUM.backup.log # log fájl helye
TAPE="/dev/st0" # szalagos meghajtó
MT=/usr/bin/mt # mt parancs
TIMEDIR=/root/Backup_Dir/last-full # utolsó mentés idejének helye
TAR=/bin/tar # a tar útvonala
NOW=$(date +%A) # a mai nap kiírva névvel (pl. kedd)
#
#
# Heti teljes mentés userdok, könyvelés, mail
#
#
full_backup(){
echo Teljes mentés
local old=$(pwd)
cd /
# Teljes mentés dátuma
echo $DATUM > $TIMEDIR/full-date
echo USERDOK MENTÉSE
$TAR -czpf $BACKUPDIR/$DATUM.userdok.tar.gz -T $LSTU
echo MAIL MENTÉSE
$TAR -czpf $BACKUPDIR/$DATUM.mail.tar.gz -T $LSTM
echo KONYVELES MENTÉSE
$TAR -czpf $BACKUPDIR/$DATUM.konyveles.tar.gz -T $LSTK
echo ETC MENTÉSE
$TAR -czpf $BACKUPDIR/$DATUM.etc.tar.gz -T $LSTE
echo USERDOK, MAIL, KONYVELES KIÍRÁSA SZALAGRA
$TAR -cvpf $TAPE -T $LSTF
$MT -f $TAPE rewind
echo Ellenőrzés
$TAR -dvf $TAPE
cd $old

}

#
#
# Növekményes mentés userdok, könyvelés, mail
#
#
diff_backup(){
local old=$(pwd)
cd /
NEWER="--newer=`cat $TIMEDIR/full-date`"
echo USERDOK NÖVEKMÉNYES MENTÉSE
$TAR $NEWER -czpf $BACKUPDIR/napi/$DATUM.userdok.tar.gz -T $LSTU
echo MAIL NÖVEKMÉNYES MENTÉSE
$TAR $NEWER -czpf $BACKUPDIR/napi/$DATUM.mail.tar.gz -T $LSTM
echo KONYVELES NÖVEKMÉNYES MENTÉSE
$TAR $NEWER -czpf $BACKUPDIR/napi/$DATUM.konyveles.tar.gz -T $LSTK
echo USERDOK, MAIL, KONYVELES KIÍRÁSA SZALAGRA
$TAR -cvpf $TAPE -T $LSTF
echo Ellenőrzés
$TAR -dvf $TAPE
$MT -f $TAPE rewind
cd $old
}

#
#
#Program és log készítés
#
#
case "$NOW" in
szombat) full_backup;;
kedd|szerda|csütörtök|péntek) diff_backup;;
*) ;;
esac > $LOGFILE 2>&1
#Program vége
Ha kézzel vagy kcron-ból futtatom, akkor hiba nélkül lefut. Ha viszont a cron, akkor a beállított időben hiba üzenet nélkül lefut, de nem csinál semmit, illetve, annyit, hogy létrehozza a logfile-t, de üresen. Olyan mintha, sőt valószínűleg ez is történik, a $NOW nem értékelődik ki és azonnal a program végére ugrik. A kérdés az, hogy miért. Olvastam, hogy a cron érzékeny ha stdout-ra akar írni a szkript, de kipróbáltam, hogy minden echo-t és a $LOGFILE-t is kivettem a végéről. A helyzet ugyanaz. ha valakinek valamilyen ötlete van ne tartsa magában.

Hozzászólások


case "$NOW" in
szombat) full_backup;;
kedd|szerda|csütörtök|péntek) diff_backup;;
*) ;;

Inkább a cron által használt alapértelmezett locale lehet a bűnös. Vagy állítsd át magyarra, vagy használd az angol neveket. Hogy megbizonyosodj erről, tegyél be egy echot a case elé.

Igen, a scriptbe.

Neked a LANG vagy LC_ALL vagy LC_TIME kell. Az LC_CTYPE nem lesz jó, mivel: "This variable determines the interpretation of characters and the behavior of character classes within pathname expansion and pattern matching."

Szerk.: később küldtem, mint ahogy te szerkesztetted. :)
Akkor megoldva.