2010-08-03 23 views
6

thời gian cho một trêu ghẹo não khác về điều tôi đoán là khá hiếm.Kịch bản PHP kết thúc sớm, không có bằng chứng về lỗi và thời gian chờ được đặt thành 0

Có giới hạn cứng trong PHP không? Hoặc trong Apache? Tôi đã có một kịch bản chạy đêm qua kéo dài khoảng 20 giờ. Sau đó, nó chỉ dừng lại, giữa kịch bản trên một dòng ngẫu nhiên không có lỗi mà tôi có thể tìm thấy.

set_time_limit (0); được đặt trong kịch bản nhưng tôi bắt đầu tự hỏi liệu có giới hạn nào khác trong khoảng 20 giờ không ...

bất kỳ ý tưởng nào?

Rất cám ơn trước.

chỉnh sửa: điều này được chạy dưới dạng wget.

edit2: Tôi sẽ xem xét vấn đề bộ nhớ và liên hệ lại với bạn, cảm ơn sự trợ giúp từ trước đến nay!

edit3: Oh tôi nên chỉ ra kịch bản này đang thu thập dữ liệu và lưu trữ nó trong một mảng, nó càng chạy càng nhiều thì lưu trữ, vâng, tôi đang phải đối mặt với việc "sử dụng hết bộ nhớ "câu trả lời ở đây ...

GIẢI PHÁP: Đặt bộ nhớ lớn hơn cho hoạt động đã khắc phục sự cố này. Cảm ơn mọi người.

+0

Bạn đang cố gắng để làm gì? – Sarfraz

+0

Bạn có chạy như cli hoặc từ apache (như mod/cgi) không? – NikiC

+0

Không có hành vi phạm tội nhưng nó là riêng tư :) Đó là một kịch bản cần đọc một số thông tin, trong 20 giờ nó được thông qua hầu hết của nó (khoảng 85%) nhưng nó cần nhiều thời gian hơn. Và không có cách nào dễ dàng để chia nhỏ thông tin. – Dorjan

Trả lời

3

có khả năng là php-cli vừa bị hỏng hoặc máy chủ của bạn đã khởi động lại. Tôi không nghĩ rằng php là vấn đề được thực hiện dài

+0

Thực tế có nhiều tập lệnh đang chạy và các tập lệnh khác tiếp tục (chúng chạy ngắn hơn tại các điểm khác nhau) cho tôi thấy rằng máy chủ không gặp sự cố nhưng bạn có thể đúng về việc php không hoạt động sau một thời gian nhất định. – Dorjan

+2

có lẽ bạn nên chạy kịch bản từ dòng lệnh thay vì apache cũng có thể là mức tiêu thụ bộ nhớ cho tập lệnh đó cao, bạn có thể tăng điều đó bằng ini_set ('memory_limit', '128M'); –

+0

Cảm ơn Christian, tôi sẽ xem xét cài đặt hiện tại – Dorjan

2

tôi đã có một tập lệnh chạy trong vài tháng mà không có vấn đề gì. tôi chỉ phải giết quá trình để chấm dứt kịch bản. vì vậy không có giới hạn nếu bạn có set_time_limit (0); trong mã của bạn. bạn đã xem xét hệ thống và gỡ lỗi nhật ký hệ điều hành của mình chưa? có thể cung cấp thêm manh mối tại sao php hoặc apache bị lỗi.

+0

Điều này là hữu ích bởi vì bây giờ tôi biết PHP có thể chạy này dài – Dorjan

4

Có lẽ PHP hết bộ nhớ sau một thời gian.

Cân nhắc việc buộc thu thập rác PHP trên mỗi lần lặp của vòng lặp có thể tiết lộ một số manh mối. http://php.net/manual/en/function.gc-collect-cycles.php

+0

Tôi sẽ cố gắng quá xem nếu đây là trường hợp, cảm ơn! – Dorjan

0

kể từ khi bạn sử dụng wget, tôi giả sử ở đây nó đang chạy dưới apache. có lẽ nó là apache có một giới hạn trên một kịch bản chạy và không phải là ứng dụng php của bạn.

bạn có thể kiểm tra điều này bằng cách chạy các ứng dụng từ các phiên bản cli

+0

Apache Timeout là Chỉ thị thời gian trong httpd.conf. Nếu không có giá trị nào được chỉ định, thì mặc định là 300 giây http://httpd.apache.org/docs/2.0/mod/core.html#timeout –

+0

Thật không may là tôi không có thời gian để chạy ứng dụng chạy rom cli như các đường dẫn dường như khác nhau đối với nội dung bao gồm và tương tự (tôi không thể nhớ tại sao tôi phải rời khỏi nó ngay bây giờ nhưng tôi nhớ đã cố gắng tìm cách đầu tiên và kết thúc với wget mặc dù tôi không muốn) – Dorjan

2

như stillstanding nói, kiểm tra các bản ghi apache, /var/log/error.log, hoặc trong các cửa sổ các "sự kiện".

+0

imho phải có một lỗi trong kịch bản của bạn, có thể bạn đã vi phạm giới hạn bộ nhớ php? – a1337q

+0

giới hạn bộ nhớ php có thể là khả năng nghi ngờ nhiều hơn! Tôi không nghĩ về điều đó, cảm ơn. – Dorjan

+0

Kiểm tra nhật ký ngay bây giờ cũng – Dorjan

-1

kiểm tra php.ini tìm thấy tệp max_execution_time thực hiện thay đổi cho phần đó chỉ mất vài giây làm đầu vào.

nhưng phải cẩn thận trong việc biên tập php.ini

+0

giới hạn thời gian được ghi là bị tắt trong bài đăng gốc. – Dorjan

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