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

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Dec 20 19:52:10 EET 2006


On 2006-12-20 19:18, George Notaras <gnot at g-loaded.eu> wrote:
> On Wed, 2006-12-20 at 18:20 +0200, Giorgos Keramidas wrote:
> > Μια αρχική συμβουλή είναι:
> > 
> >     Ποτέ μη βάζεις οτιδήποτε δεν είναι ένα απλό pathname σε cron job
> >     entry, αν δεν είσαι σίγουρος για την επίδραση που μπορεί να έχει
> >     ΚΑΘΕ ΕΝΑΣ χαρακτήρας ξεχωριστά.
> 
> Εννοείς ότι είναι καλύτερο να γράφει κανείς κάποιο script και στο cron
> job entry να υπάρχει μόνο για παράδειγμα:
> 
> x x x x x root interpreter /path/to/script

Ακριβώς.  Σε ένα 'standalone' script έχεις τη δυνατότητα να ελέγξεις με
μεγαλύτερη ακρίβεια και το environment του process που τρέχει, οπότε
είναι πιο "ελεγχόμενα" πολλά πράγματα.

> > Αυτό που θα σου πρότεινα επίσης να ελέγξεις είναι:
> > 
> >     * Τι shell χρησιμοποιείς
> > 
> >     * Τι τιμή έχουν οι LC_XXX μεταβλητές όταν τρέχεις login shell
> > 
> 
> Χρησιμοποιώ bash και οι τιμές τους, όταν εχω κάνει login ως root, είναι:
>
> LANG=en_US.UTF-8
> LC_CTYPE="en_US.UTF-8"
> LC_NUMERIC="en_US.UTF-8"
> LC_TIME="en_US.UTF-8"
> LC_COLLATE="en_US.UTF-8"
> LC_MONETARY="en_US.UTF-8"
> LC_MESSAGES="en_US.UTF-8"
> LC_PAPER="en_US.UTF-8"
> LC_NAME="en_US.UTF-8"
> LC_ADDRESS="en_US.UTF-8"
> LC_TELEPHONE="en_US.UTF-8"
> LC_MEASUREMENT="en_US.UTF-8"
> LC_IDENTIFICATION="en_US.UTF-8"
> LC_ALL=
> 
> >     * Που ορίζονται αυτές οι μεταβλητές πρώτη φορά (ειδικά αν έχεις
> >       bash, θέλει ΠΟΛΥ ΠΡΟΣΟΧΗ)
> 
> Δεν ξέρω πού ορίζονται. Πιθανότατα να τα ορίζει αρχικά κάποιο
> 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




More information about the Linux-greek-users mailing list