Tôi đang chạy một tập lệnh PHP thông qua cron bằng Wget, với lệnh sau:
wget -O - -q -t 1 http://www.example.com/cron/run
Tập lệnh sẽ mất tối đa 5-6 phút để xử lý. WGet sẽ đợi nó và cho nó tất cả thời gian nó cần, hay nó sẽ hết thời gian?
Tôi đang chạy một tập lệnh PHP thông qua cron bằng Wget, với lệnh sau:
wget -O - -q -t 1 http://www.example.com/cron/run
Tập lệnh sẽ mất tối đa 5-6 phút để xử lý. WGet sẽ đợi nó và cho nó tất cả thời gian nó cần, hay nó sẽ hết thời gian?
Câu trả lời:
Theo trang người dùng của wget , có một số tùy chọn liên quan đến thời gian chờ - và có thời gian chờ đọc mặc định là 900 giây - vì vậy tôi nói rằng, vâng, nó có thể hết thời gian chờ.
Dưới đây là các tùy chọn được đề cập:
-T seconds
--timeout=seconds
Đặt thời gian chờ của mạng thành giây giây. Đây là tương đương với việc xác định
--dns-timeout
,--connect-timeout
và--read-timeout
, tất cả cùng một lúc.
Và đối với ba tùy chọn đó:
--dns-timeout=seconds
Đặt thời gian chờ tra cứu DNS thành giây giây.
Việc tra cứu DNS không hoàn tất trong thời gian quy định sẽ không thành công.
Theo mặc định, không có thời gian chờ khi tra cứu DNS, ngoài thời gian chờ do thư viện hệ thống triển khai.
--connect-timeout=seconds
Đặt thời gian chờ kết nối thành giây giây.
Các kết nối TCP mất nhiều thời gian hơn để thiết lập sẽ bị hủy bỏ.
Theo mặc định, không có thời gian chờ kết nối, ngoài thời gian chờ được thực hiện bởi các thư viện hệ thống.
--read-timeout=seconds
Đặt thời gian chờ đọc (và ghi) thành giây giây.
"Thời gian" của thời gian chờ này đề cập đến thời gian không hoạt động: nếu, tại bất kỳ thời điểm nào trong quá trình tải xuống, không có dữ liệu nào được nhận trong hơn số giây được chỉ định, việc đọc không thành công và quá trình tải xuống được khởi động lại.
Tùy chọn này không ảnh hưởng trực tiếp đến thời lượng của toàn bộ quá trình tải xuống.
Tôi cho rằng sử dụng một cái gì đó như
wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run
nên đảm bảo không có thời gian chờ lâu hơn thời lượng tập lệnh của bạn.
(Vâng, đó có lẽ là giải pháp tàn bạo nhất có thể ^^)
-t
tùy chọn có vẻ là một bí danh của --tries
, mà Set số lần thử lại để số. ;;; Nó dường như không liên quan đến bất kỳ loại thời gian chờ nào, nhưng với số lần wget sẽ cố gắng tải xuống lại nếu có lỗi - và bạn có thể không muốn thời gian chờ bị coi là lỗi và tập lệnh đang được gọi lại.
--timeout
. Có lẽ vì tôi đang sử dụng auth cơ bản trong lệnh
Thời gian chờ mặc định là 900 giây. Bạn có thể chỉ định thời gian chờ khác nhau.
-T seconds
--timeout=seconds
Mặc định là thử lại 20 lần. Bạn có thể chỉ định các lần thử khác nhau.
-t number
--tries=number
liên kết: wget man document
Vì trong câu hỏi của bạn, bạn đã nói rằng đó là một tập lệnh PHP, có lẽ giải pháp tốt nhất có thể là chỉ cần thêm vào tập lệnh của bạn:
ignore_user_abort(TRUE);
Bằng cách này, ngay cả khi wget
kết thúc, tập lệnh PHP vẫn được xử lý ít nhất cho đến khi nó không vượt quá max_execution_time
giới hạn (chỉ thị ini: 30 giây theo mặc định).
Theo wget
anyay bạn không nên thay đổi thời gian chờ của nó, theo hướng dẫn UNIX thời gian chờ wget mặc định là 900 giây (15 phút) , whis là lớn hơn nhiều rằng phút 5-6 bạn cần.