Batch-/Shellscript Wochentag in crontab und per Shell

flaschenkind

Well-known member
ID: 118459
L
20 April 2006
4.507
337
Ich habe ein Shell Script, dass automatisiert Backups von meinem Server ausführt. Einmal in Woche wird ein vollständiges Backup gefahren, ansonsten ein Inkrementelles.
Ich lese den Tag mit
Code:
DAY=$(date +"%a")
aus und vergleiche dann, ob $DAY=="So" ist. Wenn ich das direkt in der Konsole ausführe, läufts auch. Im Crontab allerdings nicht. Ich habe jetzt herausgefunden, dass im Cron $DAY="Sun" ist, in der Shell aber $DAY="So"
Das Verhalten finde ich etwas komisch, und wüsste gerne, wieso dem so ist.

Werden crontabs in einer anderen Shell ausgeführt? :-?

EDIT: Ist Sun, nicht Son
 
Zuletzt bearbeitet:
Du kannst die Shell für den Cron-Daemon explizit vorgeben:
man 5 crontab schrieb:
Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. HOME and SHELL may be overridden by settings in the crontab; LOGNAME may not.
 
Sonntag und Sunday :biggrin:

Was schließen wir daraus? per Crontab scheint dein Shell-Script mit englischen Bezeichnern zu laufen.
 
warum defineirst du nicht ein cronjob weekly und 5o.6 x daily, siehe dazu die HowTos im Netz ?
Und warum soll ich mir den Mehraufwand machen und dann zwei Scripts schreiben, die fast das gleiche machen? :roll:

Sonntag und Sunday :biggrin:

Was schließen wir daraus? per Crontab scheint dein Shell-Script mit englischen Bezeichnern zu laufen.
Das wirds wohl sein :ugly: Die Shell hab ich bei mir auf Deutsch und das scheint dann nicht Systemweit zu sein :)
 
Das klingt eigentlich so als wuerdest du in deiner Shell eine Locale setzen und im Cron eine andere, ich denke du kannst in deinem Script einfach eine fixe Locale setzen und dann sollte es in beiden gehen :)

Wenn es nur um's Datum geht empfehle ich dir sonst einfach einen numerischen Tag zu nehmen, is nich so brittle wie string comparison:
Code:
Day:
        a   Day of the week - abbreviated name (Mon)
        A   Day of the week - full name (Monday)
        u   Day of the week - number (Monday = 1)
        d   Day of the month - 2 digits (05)
        e   Day of the month - digit preceded by a space ( 5)
        j   Day of the year - (1-366)
        w   Same as 'u'
Damit wuerdest du dann
Code:
DAY=`date +%u`
machen und bei einer 0 hast du einen Sonntag :evil: