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

Antonis Sidiropoulos asidirop at csd.auth.gr
Thu Dec 21 02:08:16 EET 2006


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.


George Notaras wrote:

>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