Προς το περιεχόμενο

Cron Jobs


spartakoscs

Προτεινόμενες αναρτήσεις

Δημοσ.

Το ερώτημα μου είναι το εξής ! υπάρχει τρόπος όταν φτιάξεις ένα Cron Job το php script να τρέχει συνεχώς μέχρι μια τιμή από να αλήθευση ?

Δημοσ.

Δεν νομίζω πως έχει σχέση το cron με το πόση ώρα θα τρέχει το script. Αν το script φτιαχτεί να τρέχει για πάντα, τότε θα τρέχει για πάντα. Το τι θα γίνει άμα το script εκτελεστεί ξανά χωρίς να έχει τελειώσει το προηγούμενο είναι ανάλογο του κώδικά του.

Δημοσ.

δηλαδή εάν έχω

 

>
while ($i = 0) {
   mysql_query("INSERT INTO example (something) VALUES('the value' ) ") or die(mysql_error());  
// check value of $i
}

 

όπου i = 0 μια τιμή από την βάση δεδομένων ,αυτό το script θα τρέχει για πάντα μέχρι να δει ότι το i είναι <> του 0 , δηλαδή το ξεκινάω σήμερα και θα τελειώσει αύριο εάν το δώσω i= 1 πχ ? αυτό εάν το τρέξεις με τον browser σου max θα σου βγάλει υπέρβαση χρόνου μετά από 40 sec (ανάλογα τον server).

Δημοσ.

Ο cron αναλαμβάνει να τρέξει μια φορά αυτό που θα του πεις, μετά είναι θέμα του ίδιου του script το πότε θα τελειώσει. Το συγκεκριμένο τρέχει για πάντα επειδή είναι λάθος ο έλεγχος (θέλει $i==0). Ακόμα κι έτσι όμως, πάλι θα πρέπει να χρησιμοποιήσεις την set_time_limit εάν όντως περιμένεις ότι αυτό το script θα τρέχει για ώρα...

Δημοσ.

ΟΚ λοιπόν εάν κατάλαβα καλά εάν φτιάξω

 

>
set_time_limit(0);
while ($i == 0) {
   mysql_query("INSERT INTO example (something) VALUES('the value' ) ") or die(mysql_error());  
// check value of $i
}

το script θα τρέχει για πάντα μέχρι το $i != 0 η

 

>
while ($i == 0) {
   mysql_query("INSERT INTO example (something) VALUES('the value' ) ") or die(mysql_error());  
// check value of $i
set_time_limit(2);
}

κάθε φορά που θα τρέχει γίνεται το loop το max time θα μεγαλώνει κατά 2 sec δηλαδή 30+2+2+2+2+….. μέχρι να τελειώσει η δουλειά που κάνει .

 

αυτό τι επίπτωση θα έχει για τον server θα είναι usable το site η δεν θα λειτουργεί τίποτα ? μιλάω πάντα για VPS και cron job δεν ενδιαφέρομαι να το τρέχω από τον browser .

 

επίσης το set_time_limit(); αλλάζει το time limit μόνο για το συγκεκριμένο script η γενικότερα του server ?

Δημοσ.

Πρώτα θα ορίσεις τον χρόνο που περιμένεις ότι θα χρειαστείς και μετά όλα τα υπόλοιπα. Όχι τίποτα άλλο, μπορεί όντως να πάει κάτι στραβά και να χρειαστεί να σταματήσει μετά από κάποιον χρόνο.

Η εντολή αυτή επηρεάζει μόνο το συγκεκριμένο script - αν θες για όλον τον server θα πρέπει να πειράξεις το php.ini

αυτό τι επίπτωση θα έχει για τον server θα είναι usable το site η δεν θα λειτουργεί τίποτα

Eξαρτάται... αν το αφήσεις και τρέχει για ώρες, κάποια στιγμή θα ξεμείνεις από ram. Εννοείται ότι στο ενδιάμεσο θα επηρεαστεί οτιδήποτε χρειάζεται να τρέξει σε php-mysql. Μήπως είναι καλύτερα να τρέξεις απευθείας εντολές mysql σε τερματικό, παρακάμπτοντας την php;

Δημοσ.

Πρώτα θα ορίσεις τον χρόνο που περιμένεις ότι θα χρειαστείς και μετά όλα τα υπόλοιπα. Όχι τίποτα άλλο, μπορεί όντως να πάει κάτι στραβά και να χρειαστεί να σταματήσει μετά από κάποιον χρόνο.

 

 

Eξαρτάται... αν το αφήσεις και τρέχει για ώρες, κάποια στιγμή θα ξεμείνεις από ram. Εννοείται ότι στο ενδιάμεσο θα επηρεαστεί οτιδήποτε χρειάζεται να τρέξει σε php-mysql. Μήπως είναι καλύτερα να τρέξεις απευθείας εντολές mysql σε τερματικό, παρακάμπτοντας την php;

στην πραγματικότητα αυτό που θέλω είναι να τρέχει το script μια φορά την εβδομάδα και να στέλνει ένα ενημερωτικό email στους χρήστες . μπορεί σήμερα να είναι 10 τα email αλλά αύριο να είναι 100 , 1000 , 10000 οπότε είναι δύσκολο να ξέρω τον χρόνο που θα πάρει γιατί εξαρτάτε τον όγκο του email και τον αριθμό που πρέπει να στείλει . έχετε να προτείνεται κάτι καλύτερο για αυτή την διαδικασία ?

Δημοσ.

Ετοιμάζεις τότε ένα αρχείο με τους παραλήπτες και στέλνεις το email με την sendmail (εντολή τερματικού) - ούτε timeouts ούτε τίποτα!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...