Διαφορετικό LC_TIME στο login shell και στο cronjob

George Notaras gnot at g-loaded.eu
Thu Dec 21 08:03:34 EET 2006


On Thu, 2006-12-21 at 02:08 +0200, Antonis Sidiropoulos wrote: 
> nomizw oti apo to crontab
> den ektelountai ta arxeia bashrc h' cshrc ktl...
> kai to environment einai kapws periorismeno (anaferetai auto sto man).
> 
> An theleis na ektelestoun ta arxeia arxikopoihshs kane mesa apo to 
> scriptaki sou
> . $HOME/.bashrc
> kai omoiws opoio allo script arxikopoihshs xreiazesai.
> 
> Epishs, to man leei oti mporeis na oriseis environment variables mesa 
> sto crontab arxeio.
> 
> A.
> 

Ευχαριστώ.

Δεν θα ήθελα να ορίσω καμία επιπρόσθετη environment variable ή να αλλάξω
κάποια υπάρχουσα για χάρη ενός script. Δεν μπορώ να καταλάβω γιατί να
μην δουλεύει απλά, χωρίς καμία τροποποίηση.

Παρακάτω εξηγώ αναλυτικά πώς έχει η κατάσταση και τι ακριβώς θέλω να
κάνω. Μπορεί να κάνω κάπου αλλού λάθος και να μην το έχω καταλάβει.

Υπάρχει κάποιο utility, ονόματι aureport, το οποίο ψάχνει μέσα σε log
αρχεία για κάποια ορισμένα γεγονότα. Μπορεί κάποιος να του ορίσει τη
χρονική περίοδο (ημερομηνία/ώρα) για την οποία αυτό θα γράψει μια
αναφορά για όλα τα συμβάντα.

Το σημαντικό είναι ότι το φορματ της ημερομηνίας ή της ώρας δεν είναι
σταθερό ή καθοριζόμενο από το χρήστη, αλλά αυτό-ορίζεται ανάλογα με το
χρησιμοποιούμενο locale.

Συμβαίνει το εξής:


1) Τρέχω το πρόγραμμα κατευθείαν από την κονσόλα του root
(LC_TIME="en_US.UTF-8")

  * ορίζω την ημερομηνία έναρξης γράφοντας το έτος με 4 ψηφία:

    # aureport -ts 12/19/2006

    λειτουργεί κανονικά.

  * γράφω το έτος με 2 ψηφία

    # aureport -ts 12/19/06

    βγάζει error.


2) Βάζω την παραπάνω εντολή σε ένα script (για μεγαλύτερη ασφάλεια, όπως
πρότεινε ο Γιώργος) για να εκτελεστεί μέσω cron (LC_TIME="POSIX"):

  * έτος με 4 ψηφία: Βγάζει error

  * έτος με 2 ψηφία: Δουλεύει


Επειδή αυτό το πρόγραμμα δεν υποστηρίζει πολλαπλά reports, έγραψα ένα
script σε python, το οποίο καλεί το παραπάνω πρόγραμμα τόσες φορές οσα
είναι τα ζητούμενα reports. Όμως, θα πρέπει, ανάλογα με το από πού
εκτελείται το python script, να περνάει την ημερομηνία στο κατάλληλο
φορματ στο aureport, ώστε το τελευταίο να μην βγάζει λάθος.

Ψαχνοντας στα docs της python, βρήκα ότι με το module locale είναι
δυνατόν να βρεθεί το φορματ της ημερομηνίας ανάλογα με το locale που
χρησιμοποιείται στο shell:

import locale
print locale.nl_langinfo(locale.D_FMT)

Το πρόβλημα είναι ότι το παραπάνω δίνει πάντα ως αποτέλεσμα το:

%m/%d/%y

από _οπουδήποτε_ κι αν εκτελείται ο κώδικας αυτός (απ'ευθείας στην
κονσόλα ή μέσω cron). Δηλαδή η ημερομηνία που δίνεται στο aureport έχει
το έτος με 2 ψηφία πάντα, γεγονός που βγάζει λάθος όταν το python script
και κατ'επέκταση το aureport τρέχουν από την κονσόλα.

Τελικά πιστεύω ότι το λάθος είναι στον κώδικα python, αλλά αυτό είναι
μόνον υπόθεση. Υπάρχει κάποιος άλλος τρόπος εύρεσης του φορματ της
ημερομηνίας ανάλογα με το locale του shell?

Και μια γενική ερώτηση: Για ποιο λόγο υποστηρίζεται ακόμα η αναγραφή του
έτους με 2 ψηφία?





More information about the Linux-greek-users mailing list