2009-08-24 5 views
14

Mam skrypt, który debuguję za pomocą zestawu instrukcji echo. To jest uruchamiane co 3 minuty na moim serwerze przez crona, i czasami zostawiam tam instrukcje echo. Nie idą do przeglądarki, po prostu jeżdżą ... gdziekolwiek?Jeśli powtarza się wypowiedź i nikt jej nie słyszy, czy kiedykolwiek otrzyma echo? (PHP cron job question)

Myślę, że to mgliste pytanie, ale co się dzieje, gdy nie ma użytkownika końcowego lub wyjścia dla wyciągu z echa? Czy gromadzi pamięć? Czy to po prostu znika? Byłbym wdzięczny za pomoc w zrozumieniu tego.

+2

Wznowienie dla poezji tytułowej. :) (I wzajemne zainteresowanie, ale nieważne.) – agorenst

+0

Tak, zgadzam się z Agorem, ładny tytuł! – DGM

+1

Otrzymujesz punkty za tytułową poezję? !! Cóż, tak, to znacznie lepsze niż niektóre, które widziałem. – pavium

Odpowiedz

10

Odpowiedź brzmi: tak, a wyjście wysyłana jest do konta, które uruchamia zadanie cron. Można to zmienić w pliku crontab poprzez ustawienie „mailto = ACCOUNTNAME” opcji, jak w poniższym przykładzie pliku cron:

MAILTO=root 

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

Każde wyjście z powyższego zadania cron zostanie wysłana do użytkownika root. Jak pisał Mike B, można również po prostu przekierować wyjście gdzie indziej na linii zadań za pomocą operatora >:

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

w takim przypadku cron nie widzi go i nie wysyła e-mail.

Najważniejsze jest to, że jeśli zostawisz jakieś instrukcje echo w skrypcie PHP i ustawisz je jako zadanie cron, zaczniesz otrzymywać e-maile od demona cron.

+3

Możesz przekierować do '/ dev/null', jeśli nie chcesz zachować danych wyjściowych. Nadal będzie drukowany, ale natychmiast zostanie odrzucony, nie zabierając żadnej pamięci. – troelskn

+0

@troelskn - zdecydowanie popularna strategia. – zombat

+2

Tak więc znalazłem, że użyłem 75% mojego miejsca na dysku na tym serwerze, a wyglądałem i wyglądałem .... i znalazłem 3 gigabajty poczty w katalogu maildir. Więc idź! –

9

Tak, są one wyprowadzane , ale nikt w szczególności (patrz zombat's answer, jest wysyłane do właściciela crontask). Można pisać wyjście skryptu do pliku poprzez:

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

(Zakładając, że używasz Linuksa od mówiłeś cron i nie zaplanowane zadanie)

+0

A czy są one przechowywane w pamięci czy coś tak złego? A może zapominasz skomentować kilka ech, nic wielkiego? –

+1

@Alex: Przechodzą do bufora STDOUT, więc tak, są przechowywane w pamięci. Jest on jednak okresowo przepłukiwany i ma maksymalną wielkość. Przeciek mem nie byłby twoimi instrukcjami echo. – Eric

+0

Jak oznajmia zombat, dane wyjściowe są wysyłane do właściciela zadania cron. Zwykle jest to konto systemowe, a więc czasami trudne do znalezienia, jeśli masz adresy wirtualne i takie. – DGM

Powiązane problemy