2009-08-24 23 views
14

Vì vậy, tôi có một kịch bản mà tôi gỡ lỗi với một loạt các câu lệnh echo. Điều này được chạy mỗi 3 phút trên máy chủ của tôi bởi cron, và đôi khi tôi để lại các câu lệnh echo trong đó. Họ sẽ không đi tới một trình duyệt, họ sẽ đi ... bất cứ đâu?Nếu tôi lặp lại một tuyên bố và không ai nghe thấy nó, nó có được lặp lại không? (PHP cron job question)

Đây là một câu hỏi mơ hồ mà tôi đoán, nhưng điều gì sẽ xảy ra khi không có người dùng cuối hoặc đầu ra cho câu lệnh echo? Liệu nó hog lên bộ nhớ? Nó chỉ biến mất? Tôi đánh giá cao sự giúp đỡ nào trong việc hiểu điều này.

+2

Được thăng hạng cho thơ ca. :) (Và sự quan tâm lẫn nhau, nhưng không bao giờ.) – agorenst

+0

Vâng, tôi đồng ý với Agor, danh hiệu hay! – DGM

+1

Bạn nhận điểm cho thơ tiêu đề? !! Vâng, vâng, nó tốt hơn nhiều so với một số tôi đã nhìn thấy. – pavium

Trả lời

10

Câu trả lời là có, và sản lượng được gửi vào tài khoản đang chạy tác vụ cron. Bạn có thể thay đổi điều này trong file crontab bằng cách thiết lập một "mailto = têntàikhoản" tùy chọn, như ví dụ tập tin cron này:

MAILTO=root 

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

Bất kỳ sản lượng từ các nhiệm vụ cron trên sẽ được gửi đến người dùng root. Như Mike B được đăng, bạn cũng có thể chỉ đơn giản là chuyển hướng đầu ra ở đâu đó trên dòng nhiệm vụ sử dụng toán tử >:

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

trong trường hợp cron không nhìn thấy nó và không gửi một email.

Điểm mấu chốt là nếu bạn để lại một số câu lệnh echo trong tập lệnh PHP và đặt nó làm công việc cron, thì bạn sẽ bắt đầu nhận email từ cron daemon.

+3

Bạn có thể chuyển hướng đến '/ dev/null', nếu bạn không muốn giữ đầu ra. Nó vẫn sẽ được in ra, nhưng nó sẽ ngay lập tức bị loại bỏ, do đó không chiếm bất kỳ bộ nhớ nào. – troelskn

+0

@troelskn - chắc chắn là một chiến lược phổ biến. – zombat

+2

Vì vậy, tôi thấy tôi đã sử dụng 75% hạn ngạch diskspace của tôi trên máy chủ đó, và nhìn và nhìn .... và tìm thấy 3 hợp đồng biểu diễn thư trong thư mục maildir. Vì vậy, có bạn đi! –

9

Có chúng được xuất ra nhưng không có ai cụ thể là (Xem zombat's answer, thư được gửi đến chủ sở hữu của crontask). Bạn có thể viết đầu ra của kịch bản của bạn vào một tập tin thông qua:

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

(Giả sử bạn đang sử dụng Linux kể từ khi bạn nói cron và nhiệm vụ không theo lịch trình)

+0

Và chúng được giữ trong bộ nhớ hay bất cứ điều gì xấu như thế? Hoặc là quên để bình luận ra một vài tiếng vang không có vấn đề lớn? –

+1

@ Alex: Chúng đi vào bộ đệm STDOUT, vì vậy có, chúng được lưu trong bộ nhớ. Nhưng nó được định kỳ xả ra và có kích thước tối đa. Việc rò rỉ mem sẽ không phải là phát biểu echo của bạn. – Eric

+0

Như đã nêu bởi zombat, đầu ra được gửi đến chủ sở hữu của công việc cron. Nó thường là một tài khoản hệ thống, và do đó đôi khi khó tìm thấy nếu bạn có địa chỉ ảo và như vậy. – DGM

Các vấn đề liên quan