2009-08-24 3 views
14

Quindi ho uno script che eseguo il debug con una serie di istruzioni di eco. Questo viene eseguito ogni 3 minuti sul mio server da cron, ea volte lascio le istruzioni di eco lì. Non stanno andando a un browser, stanno andando ... da nessuna parte?Se faccio eco a una dichiarazione e nessuno la sente, viene mai echeggiata? (Domanda di lavoro cron di PHP)

Questa è una domanda vaga, suppongo, ma cosa succede quando non ci sono utenti finali o output per un'istruzione echo? Memorizza la memoria? Scompare? Gradirei qualsiasi aiuto nel capire questo.

+2

In aumento per titolo poesia. :) (E interesse reciproco, ma non importa.) – agorenst

+0

Sì, sono d'accordo con Agor, bel titolo! – DGM

+1

Ottieni punti per la poesia del titolo? !! Beh, sì, è molto meglio di alcuni che ho visto. – pavium

risposta

10

La risposta è sì, e l'uscita viene inviato all'account che esegue l'attività cron. È possibile modificare questo nel file crontab impostando l'opzione "mailto = nomeaccount", come questo file cron esempio:

MAILTO=root 

# run a script every hour 
01 * * * * root run-parts /etc/cron.hourly 
#etc. 

Qualsiasi uscita dal compito cron sopra sarebbe spedita all'utente root. Come Mike B ha registrato, si può anche semplicemente reindirizzare l'output altrove sulla linea di attività utilizzando l'operatore >:

01 * * * * php testscript.php > /var/log/logfile.log 

nel qual caso cron non lo vede e non invia una e-mail.

La linea di fondo è che se si lasciano alcune istruzioni echo in uno script PHP e lo si imposta come un cron job, si inizierà a ricevere e-mail dal dem da cron.

+3

È possibile reindirizzare a '/ dev/null', se non si desidera mantenere l'output. Verrà comunque stampato, ma verrà immediatamente scartato, quindi non occuperà più memoria. – troelskn

+0

@troelskn - sicuramente una strategia popolare. – zombat

+2

Così ho scoperto che stavo usando il 75% della mia quota di spazio su disco su quel server, e ho guardato e guardato .... e ho trovato 3 gigs di posta nella directory di maildir. Quindi eccoti! –

9

Sì, vengono emessi ma a nessuno in particolare (Vedere zombat's answer, è inviato per posta al proprietario di crontask). È possibile scrivere l'output dello script in un file tramite:

php myscript.php > /var/log/cronlog.log 

(Supponendo che si sta utilizzando Linux dal hai detto cron e compito non programmata)

+0

E sono tenuti in memoria o qualcosa di male come quello? O si sta dimenticando di commentare alcuni echos senza un grosso problema? –

+1

@Alex: vanno nel buffer STDOUT, quindi sì, vengono conservati in memoria. Ma viene periodicamente svuotato e ha una dimensione massima. La perdita di mem non sarebbe la tua dichiarazione di eco. – Eric

+0

Come indicato da zombat, l'output viene inviato al proprietario del processo cron. Di solito è un account di sistema, e quindi a volte difficile da trovare se si dispone di indirizzi virtuali e così via. – DGM

Problemi correlati