spartakoscs Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Το ερώτημα μου είναι το εξής ! υπάρχει τρόπος όταν φτιάξεις ένα Cron Job το php script να τρέχει συνεχώς μέχρι μια τιμή από να αλήθευση ?
macabre_sunsets Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Δεν νομίζω πως έχει σχέση το cron με το πόση ώρα θα τρέχει το script. Αν το script φτιαχτεί να τρέχει για πάντα, τότε θα τρέχει για πάντα. Το τι θα γίνει άμα το script εκτελεστεί ξανά χωρίς να έχει τελειώσει το προηγούμενο είναι ανάλογο του κώδικά του.
spartakoscs Δημοσ. 22 Ιανουαρίου 2011 Μέλος Δημοσ. 22 Ιανουαρίου 2011 δηλαδή εάν έχω > 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).
dewn735 Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Ο cron αναλαμβάνει να τρέξει μια φορά αυτό που θα του πεις, μετά είναι θέμα του ίδιου του script το πότε θα τελειώσει. Το συγκεκριμένο τρέχει για πάντα επειδή είναι λάθος ο έλεγχος (θέλει $i==0). Ακόμα κι έτσι όμως, πάλι θα πρέπει να χρησιμοποιήσεις την set_time_limit εάν όντως περιμένεις ότι αυτό το script θα τρέχει για ώρα...
spartakoscs Δημοσ. 22 Ιανουαρίου 2011 Μέλος Δημοσ. 22 Ιανουαρίου 2011 ΟΚ λοιπόν εάν κατάλαβα καλά εάν φτιάξω > 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 ?
dewn735 Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Πρώτα θα ορίσεις τον χρόνο που περιμένεις ότι θα χρειαστείς και μετά όλα τα υπόλοιπα. Όχι τίποτα άλλο, μπορεί όντως να πάει κάτι στραβά και να χρειαστεί να σταματήσει μετά από κάποιον χρόνο. Η εντολή αυτή επηρεάζει μόνο το συγκεκριμένο script - αν θες για όλον τον server θα πρέπει να πειράξεις το php.ini αυτό τι επίπτωση θα έχει για τον server θα είναι usable το site η δεν θα λειτουργεί τίποτα Eξαρτάται... αν το αφήσεις και τρέχει για ώρες, κάποια στιγμή θα ξεμείνεις από ram. Εννοείται ότι στο ενδιάμεσο θα επηρεαστεί οτιδήποτε χρειάζεται να τρέξει σε php-mysql. Μήπως είναι καλύτερα να τρέξεις απευθείας εντολές mysql σε τερματικό, παρακάμπτοντας την php;
PeLLaRaS Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Υπάρχει τρόπος να το τρέχεις σαν πρόγραμμα, που νομίζω, χωρίς να είμαι σίγουρος, δεν υπάρχει θέμα χρονικού περιορισμού.
spartakoscs Δημοσ. 22 Ιανουαρίου 2011 Μέλος Δημοσ. 22 Ιανουαρίου 2011 Πρώτα θα ορίσεις τον χρόνο που περιμένεις ότι θα χρειαστείς και μετά όλα τα υπόλοιπα. Όχι τίποτα άλλο, μπορεί όντως να πάει κάτι στραβά και να χρειαστεί να σταματήσει μετά από κάποιον χρόνο. Eξαρτάται... αν το αφήσεις και τρέχει για ώρες, κάποια στιγμή θα ξεμείνεις από ram. Εννοείται ότι στο ενδιάμεσο θα επηρεαστεί οτιδήποτε χρειάζεται να τρέξει σε php-mysql. Μήπως είναι καλύτερα να τρέξεις απευθείας εντολές mysql σε τερματικό, παρακάμπτοντας την php; στην πραγματικότητα αυτό που θέλω είναι να τρέχει το script μια φορά την εβδομάδα και να στέλνει ένα ενημερωτικό email στους χρήστες . μπορεί σήμερα να είναι 10 τα email αλλά αύριο να είναι 100 , 1000 , 10000 οπότε είναι δύσκολο να ξέρω τον χρόνο που θα πάρει γιατί εξαρτάτε τον όγκο του email και τον αριθμό που πρέπει να στείλει . έχετε να προτείνεται κάτι καλύτερο για αυτή την διαδικασία ?
dewn735 Δημοσ. 22 Ιανουαρίου 2011 Δημοσ. 22 Ιανουαρίου 2011 Ετοιμάζεις τότε ένα αρχείο με τους παραλήπτες και στέλνεις το email με την sendmail (εντολή τερματικού) - ούτε timeouts ούτε τίποτα!
spartakoscs Δημοσ. 22 Ιανουαρίου 2011 Μέλος Δημοσ. 22 Ιανουαρίου 2011 γίνεται με αυτόν τον τρόπο να τραβάει δυναμικά πληροφορίες για τον κάθε χρήστη που να τις συμπεριλαμβάνει μέσα στο email ?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.