Διαφορετικό 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