cron job

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Oct 18 14:08:00 EEST 2004


On 2004-10-18 13:46, Nikos Kanellopoulos <nkan at panafonet.gr> wrote:
> On 2004-10-18 13:18, Nikos Kanellopoulos <nkan at panafonet.gr> wrote:
> > Γεια σας.
> >
> > Έχω ένα σκριπτάκι Perl που το έχω βάλει να τρέχει ως cron job κάθε
> > μια ώρα.
> >
> > Το σκριπτ μου στέλνει email από έναν remote server στο pop3 account
> > που έχω στην panafonet.
> >
> > Όταν το τρέχω από ssh, το email έρχεται κανονικά.  Όταν τρέχει από
> > το cron, δεν έρχεται τίποτα. Και τρέχει σίγουρα γιατί παίρνω mail
> > στον remote server από το cron daemon.
> >
> > Τί μπορεί να συμβαίνει;
>
> > Giorgos Keramidas wrote:
> >Το crontab entry σου, κατά πάσα πιθανότητα.
> >Δείξε μας ακριβώς τι έχεις βάλει στο crontab...
>
> Το crontab entry έχει ως εξής:
> 0 * * * *       /home/astraka/getvotes.pl  # mail last hour's  votes
>
> το mailbox στον remote server έχει πλημμυρίσει από τα μηνύματα
> του cron daemon με το ουτput του script

Στο igloo.linux.gr τρέχει το vixie-cron (το cron που έχει γράψει ο Paul
Vixie).  Το λέω αυτό μήπως τυχόν το δικό σου cron είναι διαφορετικό και
δεν ισχύουν τα παρακάτω.

Στο vixie-cron λοιπόν λέει το manpage του crontab(5) ότι το έκτο πεδίο
είναι η εντολή που πρέπει να τρέξει:

    The ``sixth'' field (the rest of the line) specifies the command to be
    run.  The entire command portion of the line, up to a newline or %
    character, will be executed by /bin/sh or by the shell specified in the
    SHELL variable of the crontab file.  Percent-signs (%) in the command,
    unless escaped with backslash (\), will be changed into newline
    characters, and all data after the first % will be sent to the command
    as standard input. There is no way to split a single command line onto
    multiple lines, ala the shell's trailing "\".

Από το manpage δεν φαίνεται σαφώς αν το πεδίο της εντολής εκτελείται με
τρόπο που να υποστηρίζει το πέρασμα command line arguments ή σχολίων στο
shell [π.χ. με την execlp() αντί για την execv()].  Αυτό σημαίνει πως το
cron μπορεί να προσπαθήσει να εκτελέσει την εντολή

	"/home/astraka/getvotes.pl # mail last hour's votes"

με execv(), που φυσικά δε θα δουλέψει σωστά, αφού δεν υπάρχει εκτελέσιμο με
όνομα "/home/astraka/getvotes.pl # mail last hour's votes" στο σύστημά σου.
Το cron θα σου στείλει τότε ένα email, αλλά όχι επειδή πέτυχε να τρέξει το
Perl script.

Δοκίμασε να βγάλεις το σχόλιο που έχεις βάλει στο τέλος της γραμμής, γιατί
δεν ξέρω αν υποστηρίζει σχόλια οπουδήποτε στο crontab το cron daemon σου.

Αν ούτε αυτό παίξει σωστά, τότε στείλε μου ένα από τα email που σου στέλνει
το cron όταν τρέχει την εντολή `/home/astraka/getvotes.pl'.

- Γιώργος




More information about the Linux-greek-users mailing list