Διαφορετικό LC_TIME στο login shell και στο cronjob
George Notaras
gnot at g-loaded.eu
Wed Dec 20 20:45:36 EET 2006
On Wed, 2006-12-20 at 19:52 +0200, Giorgos Keramidas wrote:
> > Εννοείς ότι είναι καλύτερο να γράφει κανείς κάποιο script και στο cron
> > job entry να υπάρχει μόνο για παράδειγμα:
> >
> > x x x x x root interpreter /path/to/script
>
> Ακριβώς. Σε ένα 'standalone' script έχεις τη δυνατότητα να ελέγξεις με
> μεγαλύτερη ακρίβεια και το environment του process που τρέχει, οπότε
> είναι πιο "ελεγχόμενα" πολλά πράγματα.
Όντως. Θα το εφαρμόζω.
> > Δεν ξέρω πού ορίζονται. Πιθανότατα να τα ορίζει αρχικά κάποιο
> > script /etc/profile.d/lang.sh, αλλά και πάλι δεν είμαι βέβαιος, καθώς
> > δεν με απασχόλησε ποτέ (κακώς).
>
> Αυτό που δεν είναι προφανές όταν κοιτάζει κανείς ένα crontab entry είναι
> ότι το cron τρέχει τις εντολές ανοίγοντας ένα νέο shell process. Αυτό
> το shell δεν είναι ούτε interactive, ούτε login shell όμως.
>
> Ανάλογα με το που ρυθμίζονται και πώς φορτώνονται οι LC_xxx μεταβλητές
> που βλέπεις, μπορεί να γίνεται το εξής:
>
> * Εσύ βάζεις στο cron job κάτι σαν:
>
> env LC_TIME='C' /path/to/script.sh
>
> * Το shell ξεκινάει, διαβάζει το /etc/τάδε.d/profile και αναιρεί όλα
> όσα έκανες
>
> * Το script τρέχει με το λάθος environment
>
> Για να είσαι σίγουρος ότι δε γίνεται και τέτοιο, δοκίμασε στο cron entry
> να βάλεις κάτι σαν:
>
> */5 * * * * /root/scripts/gker.sh
>
> Και στο gker.sh βάλε κάτι μικρό σαν:
>
> 1 #!/bin/sh
> 2
> 3 env | sort
Αυτές οι μεταβλητές ορίζονται όταν τρέχει το /root/ztest.sh από cronjob
όπως περιέγραψες:
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
PWD=/root
SHELL=/bin/sh
SHLVL=2
USER=root
_=/usr/bin/env
Δεν υπάρχει πουθενά η LANG ή κάποια άλλη LC_* μεταβλητή. Προσθέτοντας
και την εντολή "locale" στο παραπάνω script βλέπω ότι όλες οι LC_*
μεταβλητές έχουν την τιμή POSIX. Αυτό σημαίνει φορματ ημερομηνίας:
%m/%d/%y
?
Στο shell του root, όπου η LC_TIME="en_US.UTF-8", το format της
ημερομηνίας λογικά θα πρέπει να είναι:
%m/%d/%Y
Τότε γιατί το παρακάτω δείχνει ότι το format είναι το ίδιο είτε τρέχει
μέσω cron job είτε απ'ευθείας από την κονσόλα?
python -c "import locale; print locale.nl_langinfo(locale.D_FMT)"
%m/%d/%y
Αυτό μάλλον με είχε μπερδέψει από την αρχή. Τέλος πάντων θα το ξαναδώ
αύριο όπως και όποια απάντησή σου. Ευχαριστώ για τις πληροφορίες :)
(προς το παρόν, πρέπει να ξεραθώ στον ύπνο...)
More information about the Linux-greek-users
mailing list